MongoDB Java Driver什么时候连接?

时间:2013-06-06 04:50:44

标签: java mongodb mongodb-java

我正在为MongoDB使用最新的Java Driver(2.11.1)。 MongoDB Java API基本上是

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

1)当我们进行一些操作(查找,更新,删除等)时建立连接

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

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