MongoDB Java Driver什么时候连接?

shi*_*cky 6 java mongodb mongodb-java

我正在为MongoDB使用最新的Java驱动程序(2.11.1).MongoDB Java API本质上是

  • MongoClient类的一个实例(带有内部连接池)
  • 获取DB对象的getDB()
  • 获取DBCollection对象的getCollection()

1)什么时候建立与db的连接?是在调用getDB()还是调用getCollection()时?

2)一次或每次需要调用getDB()会更好吗?(这有关系吗? - MongoClient保持DB对象缓存?)

3)通过多线程重用单个DBCollection对象或从多线程调用getCollection()会更好吗?(DBCollection缓存了吗?)

小智 7

MongoClient类管理从客户端应用程序到MongoDB集群的延迟加载的连接池.您可以使用每个主机的特定连接数以及等待连接的线程数初始化MongoClient.由于MongoClient管理连接数和线程并发性,因此您需要为每个虚拟机使用该类的一个实例.DB和DBCollection都通过MongoClient的连接池执行操作,因此不需要为此缓存它们.您实例化的DB或DBCollection对象的数量没有限制.但是,由于这些类是线程安全的,并且可以使用特定的读取首选项和写入问题进行设置,因此可以使用DB或DBCollection类的单个实例来执行多个操作.


Abh*_*mar 0

1)当我们执行某些操作(查找、更新、删除等)时建立连接

2) Doc 说:“通常,您只为给定的数据库集群创建 1 个实例,并在您的应用程序中使用它”。因此,没有必要缓存 DB 对象,并且它也不会缓存在驱动程序代码中

3)DBCollection和DB是线程安全的。DBCollection 缓存在驱动程序中的 DBApiLayer 类中。