连接池
mongocxx::client
与 mongocxx::pool
独立的mongocxx::client
使用单线程算法来监控其连接的集群状态。当连接到副本集时,每60秒线程会“停止世界”以检查集群状态。另一方面,mongocxx::pool
为集群中的每个服务器使用单独的后台线程,每个线程每10秒检查其监控的服务器状态。由于在后台监控集群而不是“停止世界”具有性能优势,如果您的应用程序可以访问多个线程,即使您的应用程序仅使用一个线程,也强烈建议使用mongocxx::pool
而不是一组独立客户端。
连接池和线程安全
mongocxx::pool
可在多个线程间共享,并用于创建客户端。然而,每个 mongocxx::client
只能在单个线程中使用。请参阅线程安全文档 了解如何以线程安全的方式使用 mongocxx::client
。
配置连接池
连接池中的客户端数量由 URI 参数 minPoolSize
和 maxPoolSize
决定。当驱动器空闲或完全使用时,minPoolSize
和 maxPoolSize
选项设置资源使用目标。当完全使用时,可提供最多 maxPoolSize 个客户端。当客户端返回到池中时,它们将被销毁,直到池再次缩小到 minPoolSize。
maxPoolSize | 由 mongocxx::pool 创建的客户端的最大数量(包括池中和已检查出的)。默认值是 100。一旦达到这个值,mongocxx::pool::acquire 将阻塞,直到另一个线程将客户端返回到池中。 |
minPoolSize | 设置空闲时池的目标大小。一旦创建了这么多客户端,池中就不会少于这么多客户端。如果创建了 minPoolSize 以上的额外客户端,当它们返回到池中时将被销毁。默认值是 "0",这将禁用此功能。当禁用时,客户端永远不会被销毁。 |
使用连接池
要使用连接池,首先创建一个 mongocxx::pool
,将 URI 作为参数传递。然后,调用 mongocxx::pool::acquire
从池中获取客户端。客户端将在超出作用域时自动返回到池中。
请参阅连接池示例 以获取更多详细信息。