对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

自定义MongoDB Server选择

所有MongoDB驱动程序在选择要读取或写入的服务器时都遵循定义的算法。通过使用 MongoClientSettings对象的 ClusterSettings属性,您可以自定义此算法以选择最适合您的应用程序的服务器。

重要

自定义服务器选择算法可能会产生意想不到的后果,例如读取或写入性能下降。

当Kotlin Sync驱动程序执行读取操作时,它会按顺序执行以下步骤,以选择MongoDB 部署:

  1. 从适合请求操作的已知服务器列表中选择所有服务器,驱动程序认为不可用或有问题的服务器除外

    1. 对于读取,选择与活动读取偏好(read preference)匹配的所有服务器

    2. 对于写入,请选择所有可写入的服务器

  2. 调用用户定义的服务器选择器函数(如果用户提供了该函数),并传入上一步中的列表

  3. localThreshold 连接设置应用于从该函数返回的服务器列表

  4. 从符合上述条件的服务器列表中随机选择最多两台服务器,然后选择具有较少未完成并发操作的服务器

当 Kotlin Sync 驱动程序执行写入操作时,它会先从已知服务器列表中选择所有可写入的服务器,而不仅仅是那些与活动读取偏好相匹配的服务器。其余步骤与前面列表中的相同。

要学习;了解有关MongoDB服务器选择算法的更多信息,请参阅MongoDB Server手册中的服务器选择算法

您可以通过创建实现 ServerSelector 接口的类实现自己的自定义服务器选择逻辑。以下示例显示了一个简单的自定义服务器选择类,该类选择 type 值为 ServerType.REPLICA_SET_SECONDARY 的服务器:

class CustomServerSelector : ServerSelector {
override fun select(cluster: ClusterDescription): List<ServerDescription> {
return cluster.serverDescriptions.filter { it.type == ServerType.REPLICA_SET_SECONDARY }
}
}

使用 applyToClusterSettings() 方法将此类的实例传递给 MongoClientSettings。以下示例展示了如何使用上一示例中的自定义服务器选择器类的实例创建 MongoClient

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection URI>"))
.applyToClusterSettings { builder ->
builder.serverSelector(CustomServerSelector())
}
.build()
val mongoClient = MongoClient.create(settings)

您可以在 MongoClient对象或连接 URI 中指定以下服务器选择设置:

设置
说明

localThreshold

服务器资格的延迟窗口。如果服务器的往返时间超过最快服务器的往返时间加上此值,则该服务器没有资格被选中。除了连接

ClusterSettingsURI 之外,您还可以将此设置指定为

对象。数据类型:Integer
默认值:15 毫秒
连接 URI 示例:localThresholdMS=0

readPreference

客户端的默认读取偏好设置。有关读取偏好(read preference)选项的更多信息,请参阅MongoDB Server手册中的读取偏好。除了连接MongoClientSettings URI 之外,您还可以将此设置指定为

对象。数据类型:ReadPreference
默认值:ReadPreference.primary()
连接 URI 示例:

readPreference=primaryPreferred
&maxStalenessSeconds=90
&readPreferenceTags=dc:ny,rack:1

serverSelectionTimeout

驾驶员在超时之前尝试选择服务器的时间长度。除了连接ClusterSettings URI 之外,您还可以将此设置指定为

对象。数据类型:Long
默认值:30 秒
连接 URI 示例:serverSelectionTimeoutMS=15000

要学习;了解有关本指南中使用的类和方法的更多信息,请参阅以下API文档: