Overview
在本指南中,您可以学习;了解Kotlin Sync驾驶员如何使用连接池来管理与MongoDB 部署的连接。您可以在应用程序中指定连接池设置来配置此行为。
连接池是Kotlin Sync驾驶员维护的打开数据库连接的缓存。当您的应用程序请求连接到MongoDB时,驾驶员会从池中检索连接,执行操作,然后将连接返回到池中以供重复使用。
连接池有助于减少应用程序延迟和驾驶员创建新连接的次数。
创建连接池
对于MongoDB拓扑结构中的每个服务器,每个 MongoClient
实例都有一个内置连接池。如果不配置 minPoolSize
选项,连接池将按需打开套接字。这些套接字支持应用程序中的并发MongoDB操作。
当您实例化新的 MongoClient
时,客户端会为MongoDB拓扑结构中的每个服务器打开两个套接字,以监控服务器的状态。
示例,连接到三节点副本集的客户端会打开六个监控套接字。如果应用程序使用 maxPoolSize
的默认设置,并且仅查询主节点 (primary node in the replica set)节点,则连接池最多可以有 106
个打开的套接字和 100
个连接。如果应用程序使用 读取偏好(read preference)来查询从节点(secondary node from replica set),则总连接数可为 306
。
为了效率,请为每个进程创建一个客户端,然后将其重复用于所有操作。避免为每个请求创建新客户端,因为这会增加延迟。
配置连接池
您可以使用连接字符串或 MongoClientSettings
对象指定连接池的设置。
选择 Connection String 或 MongoClientSettings标签页,查看相应的语法:
下表描述了可以在连接字符串中设立的连接池选项:
选项 | 说明 |
---|---|
| 设置池可以同时建立的最大连接数。 默认: |
| 设置连接在被删除和关闭之前可以在池中保持空闲状态的最大毫秒数。 默认: |
| 设置池中可以打开的最大连接数。如果某个操作需要新连接,而连接池的打开连接数已达到最大数量,则该操作将等待新连接打开。要限制此等待时间,请使用单个超时设置。要学习;了解更多信息,请参阅限制服务器执行时间指南。 默认: |
| 设置池中可以打开的最小连接数。 默认值: |
| 设置驾驶员在关闭连接之前可以继续使用池连接的最长时间(以毫秒为单位)。值为 默认值: |
要学习;了解有关这些选项的详情,请参阅 ConnectionString API文档。
要在 MongoClientSettings
对象中指定连接池设置,请将 applyToConnectionPoolSettings()
方法链接到 MongoClientSettings
构建器。将 ConnectionPoolSettings.Builder
区块作为参数传递给 applyToConnectionPoolSettings()
方法。
下表描述了可在 ConnectionPoolSettings.Builder
区块中用于配置连接池的setter 方法:
方法 | 说明 |
---|---|
| 添加监听器,用于监听与连接池相关的事件。 |
| 应用 |
| 使用在 |
| 设置运行连接池维护作业的频率。 |
| 设置在连接池运行第一个维护作业之前的等待时间。 |
| 设置连接在关闭之前可以空闲的最长时间。 |
| 设置池连接在关闭之前可以打开的最长时间。 |
| 设置池中可以打开的最大连接数。 默认值: |
| 设置等待可用连接的最长时间。 默认值: |
| 设置池中可以打开的最小连接数。 默认值: |
要学习;了解有关这些方法的更多信息,请参阅 ConnectionPoolSettings.Builder API文档。
例子
以下示例展示了如何创建最大连接数为 50
的连接池。
选择 Connection String 或 MongoClientSettings标签页,查看相应的语法:
val uri = "mongodb://<host>:<port>/?maxPoolSize=50" val client = MongoClient.create(uri)
val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyConnectionString(ConnectionString("mongodb://<host>:<port>/")) .applyToConnectionPoolSettings { builder -> builder.maxSize(50) } .build() )
更多信息
要学习;了解有关使用连接池的更多信息,请参阅MongoDB Server手册中的连接池概述。