【问题标题】:MongoDB Java Driver: MongoCore Driver vs. MongoDB Driver vs. MongoDB Async DriverMongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序
【发布时间】:2016-03-13 08:17:20
【问题描述】:

MongoDB Java 驱动程序有三种不同的驱动程序选项:

  1. 核心驱动程序
  2. MongoDB 驱动程序
  3. MongoDB 异步驱动程序

drivers description page 对它们中的每一个进行了简要描述,但没有提供关于我何时应该使用它们的进一步解释。我的问题:你能澄清一下使用它们的情况吗?什么时候我应该更喜欢一个而不是第二个,什么时候我必须/必须使用特定的驱动程序选项?

【问题讨论】:

    标签: java mongodb mongodb-query mongodb-java


    【解决方案1】:

    TL;DR

    如果操作很慢,请使用异步驱动程序,或者在大多数情况下使用常规驱动程序。您不应该使用核心驱动程序。

    MongoDB 常规驱动程序

    可用于搜索、创建、读取、更新和删除文档的通用驱动程序。只要没有返回结果或未完成操作(同步行为),find(...)updateMany(...)deleteMany(...) 和类似方法就会挂起。这是大多数程序使用的驱动程序,并且在大多数情况下都很好。

    这是一个插入单个文档的示例:

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

    MongoDB 异步驱动程序

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

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

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

    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...")
    

    欲了解更多信息,请阅读this

    MongoDB 核心驱动程序

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

    【讨论】:

    • 感谢您的详细解答。关于asyncregular 驱动程序,async 驱动程序的对立面是什么?为什么不总是使用async
    • 还有一个子问题。在mongodb.github.io/mongo-java-driver 上有两个不同的常规驱动程序:mongo-java-drivermongodb-driver 除了 mongodb-driver-核心。两者都是Java驱动,那么前两个驱动有什么区别呢?
    • 根据此链接github.com/mongodb/mongo-java-driver,他们说 mongo-java-driver 是一个一体化 jar(嵌入了核心驱动程序和 bson)。
    • @Sharadr 是的,这是正确的。 BSON 库和核心驱动程序作为常规驱动程序和异步驱动程序的依赖项。当他们提到mongo-java-driver 是一个“一体化 jar”时,他们的意思是它将常规驱动程序及其依赖项(即核心驱动程序和 BSON 库)打包在同一个 JAR 中。
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多