我正在为MongoDB使用最新的Java Driver(2.11.1)。 MongoDB Java API基本上是
1)什么时候建立与db的连接?是调用getDB()还是调用getCollection()?
2)一次或每次需要时调用getDB()会更好吗? (这有关系吗? - MongoClient保持DB对象缓存?)
3)通过多线程重用单个DBCollection对象或从多线程调用getCollection()会更好吗? (DBCollection缓存了吗?)
答案 0 :(得分:7)
MongoClient类管理从客户端应用程序到MongoDB集群的延迟加载的连接池。您可以使用每个主机的特定连接数以及等待连接的线程数初始化MongoClient。由于MongoClient管理连接数和线程并发性,因此您需要为每个虚拟机使用该类的一个实例。 DB和DBCollection都通过MongoClient的连接池执行操作,因此不需要为此缓存它们。您实例化的DB或DBCollection对象的数量没有限制。但是,由于这些类是线程安全的,因此可以使用特定的读取首选项设置。编写问题时,可以使用单个DB或DBCollection类实例来执行多个操作。
答案 1 :(得分:0)
1)当我们进行一些操作(查找,更新,删除等)时建立连接
2)Doc说:“通常,您只为给定的数据库集群创建一个实例,并在整个应用程序中使用它”。因此,没有缓存DB对象的意义,它也没有缓存在驱动程序代码中
3)DBCollection和DB是线程安全的。 DBCollection缓存在驱动程序的DBApiLayer类中。