MongoDB Java驱动程序:MongoCore驱动程序VS MongoDB驱动程序VS MongoDB异步驱动程序

13
MongoDB Java驱动程序有三个不同的驱动程序选项:
  1. Core驱动程序
  2. MongoDB驱动程序
  3. MongoDB异步驱动程序
驱动程序描述页面提供了它们的简要描述,但没有进一步解释何时应使用它们。
我的问题是:
  1. 每种驱动程序选项的使用情况是什么?
  2. 在什么情况下应优先选择其中一种,何时必须/必须使用特定的驱动程序选项?
1个回答

16

TL;DR:

如果操作速度较慢,请使用异步驱动程序,否则在大多数情况下使用常规驱动程序。不应使用核心驱动程序。

MongoDB常规驱动程序:

通用驱动程序,可用于搜索、创建、读取、更新和删除文档。 find(...)updateMany(...)deleteMany(...)等方法将一直挂起,直到结果返回或操作完成(同步行为)。这是大多数程序使用的驱动程序,在大多数情况下表现良好。

以下是插入单个文档的示例:

collection.insertOne(doc);
//Do something here.
System.out.println("Inserted!")

MongoDB异步驱动程序:

另一种您可以使用的驱动程序来搜索、创建、读取、更新和删除文档。此驱动程序提供与常规驱动程序类似的方法(find(...)updateMany(...)deleteMany(...)等)。

与常规驱动程序的区别在于,由于异步驱动程序会以回调的方式发送结果(异步行为),因此主线程不会挂起。当操作可能需要很长时间(需要处理大量数据、延迟高、查询未索引字段等)且您不想管理多个线程时,可以使用此驱动程序。

以下是插入单个文档时回调的示例:

collection.insertOne(doc, new SingleResultCallback<Void>() {
    @Override
    public void onResult(final Void result, final Throwable t) {
        //Do something here.
        System.out.println("Inserted!");
    }
});
// Do something to show that the Document was not inserted yet.
System.out.println("Inserting...")

了解更多信息,请阅读此文档

MongoDB核心驱动程序

常规和异步驱动程序的基本层。它包含执行所有常规和异步驱动程序共同操作的低级方法。除非您正在为MongoDB制作新的API /驱动程序,否则不应使用核心驱动程序。


谢谢您提供详细的答案。关于“async”与“regular”驱动程序,使用“async”驱动程序有哪些缺点?为什么不能总是使用“async”呢? - Mike
1
还有一个子问题。在https://mongodb.github.io/mongo-java-driver/上有两个不同的常规驱动程序:*mongo-**java**-driver*和*mongodb-driver*,除了*mongodb-driver-core*。它们都是Java驱动程序,那么前两个驱动程序之间有什么区别? - Mike
1
根据此链接 https://github.com/mongodb/mongo-java-driver,他们说mongo-java-driver是一个全能的jar包(内嵌了核心驱动程序和bson)。 - Sharadr
2
@Sharadr 是的,这是正确的。BSON 库和核心驱动程序是常规驱动程序和异步驱动程序的依赖项。当他们提到 mongo-java-driver 是一个“all-in-one jar”时,意思是它将常规驱动程序及其依赖项(因此包括核心驱动程序和 BSON 库)打包在同一个 JAR 中。 - Cydrick Trudel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接