我正在为MongoDB使用最新的Java驱动程序(2.11.1)。Java本质上是MongoDB
1)到db的连接何时建立?是在调用getDB()还是调用getCollection()时?
( 2)您需要时调用getDB()一次还是每次调用一次更好?(这有关系吗?- MongoClient保持DB对象缓存?)
3)通过多线程重用单个DBCollection对象还是从多线程调用getCollection()比较好?( DBCollection缓存了吗?)
发布于 2013-06-11 15:18:47
MongoClient类管理从客户端应用程序到MongoDB集群的延迟加载连接池。您可以使用每个主机的特定连接数以及等待连接的线程数初始化MongoClient。由于MongoClient同时管理连接数和线程并发性,所以您需要在每个虚拟机上使用类的一个实例。DB和DBCollection都通过MongoClient的连接池执行它们的操作,因此不需要缓存它们。实例化的DB或DBCollection对象的数量没有限制。但是,由于这些类是线程安全的,并且可以设置特定的读首选项&写关注点,所以可以使用DB或DBCollection类的单个实例来执行多个操作。
发布于 2013-06-06 08:35:15
( 1)当我们进行某些操作(查找、更新、删除等)时,建立了连接。
2) Doc说:“通常您只为给定的数据库集群创建一个实例,并在应用程序中使用它”。因此,缓存DB对象是没有意义的,它也没有在驱动程序代码中缓存。
3) DBCollection和DB是线程安全的.DBCollection被缓存在驱动程序的DBApiLayer类中。
https://stackoverflow.com/questions/16953878
复制相似问题