mongodb java驱动程序何时建立连接?

apeeds0o  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(398)

我正在为mongodb使用最新的java驱动程序(2.11.1)。mongodbjavaapi本质上是
mongoclient类的一个示例(带有内部连接池)
用于获取db对象的getdb()
用于获取dbcollection对象的getcollection()
1) 何时建立到db的连接?是在调用getdb()还是在调用getcollection()时?
2) 每次调用getdb()还是每次调用都好(有关系吗?-mongoclient是否缓存db对象?)
3) 多线程重用单个dbcollection对象还是从多线程调用getcollection()更好(dbcollection是否已缓存?)

z31licg0

z31licg01#

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

ql3eal8s

ql3eal8s2#

1) 当我们执行某些操作(查找、更新、删除等)时,就会建立连接
2) doc说:“通常,您只为给定的数据库集群创建一个示例,并在整个应用程序中使用它”。因此,没有必要缓存db对象,它也不会缓存在驱动程序代码中
3) dbcollection和db是线程安全的。dbcollection缓存在驱动程序的dbapilayer类中。

相关问题