Mongodb异步vs同步Java驱动程序



我对Mongodb的java驱动程序很困惑。阅读官方文档似乎可以使用正常的MondoDB驱动程序或MongoDB异步驱动程序。

第一个问题是:我可以在同一个应用程序中使用这两个还是我必须选择一个?

尝试使用异步驱动程序,我发现我过去经常做的事情(使用正常驱动程序),现在我有点迷路了。例如,我过去常常这样做:

FindIterable<Document> iterable = db.getCollection("my_coll").find(query);
String json = JSON.serialize(iterable);

现在我真的不知道如何将结果转换为json字符串,因为他们没有包括来自异步驱动程序的JSON类。第二个问题:如果我不能同时使用两个驱动程序,那么我如何序列化FindIterable<Document> ?

答案是:

    当然,你可以同时使用两个驱动程序。事实上,如果你真的关心你的应用程序的性能,你应该使用同步驱动程序的那些动作,你需要从MongoDB的响应(如find())。你将使用异步驱动程序的那些你不需要它,为"触发和遗忘"的动作(如插入或更新)。所以序列化问题从上面得到了答案。如果你得到一个响应,你正在使用同步驱动程序,因此你可以继续使用JSON类:

JSON.serialize(iterable);

需要注意的一点是,这两个驱动程序共享一些依赖项。尝试对齐驱动程序的版本,使它们都期望相同版本的共同依赖项,否则你可能会因为类加载器为一个或其他驱动程序选择不兼容的类版本而导致一些"未找到类"类型问题。

我想补充的是,我发现异步驱动程序非常适合的用例是一个大型导出样式的查询,我必须从web服务返回大量数据。在这种情况下,我必须返回一个大的CSV。以前,这种方法在将整个CSV数据集写入客户端之前会消耗大量RAM。使用异步驱动程序,我可以从MongoDB读取小批量(每次500条记录似乎是最佳的),并将它们以块响应的形式写入浏览器客户端。

相关内容

最新更新