服务器选择算法
MongoDB驱动程序使用服务器选择算法来选择要使用的副本集成员,或者当连接到多个 mongos
实例时,选择使用哪个mongos
实例。
服务器选择在每次操作中进行一次。
此页面上的信息适用于在以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
副本集阅读取偏好
服务器选择在每次操作时都会发生一次,并受读取偏好和 localThresholdMS
设置的控制,以确定节点的读取资格。对于每个操作,都会重新评估读取偏好。
读取偏好模式 | 选择进程 |
---|---|
primary (默认) |
|
| |
| |
| |
|
分片集群的读取偏好
负载均衡
如果连接种子列表中存在多个 mongos
实例,则驱动程序将确定哪个 mongos
是“最接近的”(即具有最低平均网络往返时间的节点),并通过添加此“最接近”的 mongos
实例和 localThresholdMS
的平均往返时间来计算延迟窗口。该驱动程序将在延迟窗口内的 mongos
实例之间随机进行负载平衡。
读取偏好和分片
对于具有副本集分片的分片集群,mongos
在读取分片时会应用读取偏好。服务器选择受读取偏好和 replication.localPingThresholdMs
设置的控制。对于每个操作,都会重新评估读取偏好。
对冲读 (Hedged Reads)
重要
从 MongoDB 8.0开始,对冲读已弃用。 默认情况下,指定读取偏好nearest
的查询不再使用对冲读。 如果您明确指定对冲读,MongoDB 会执行对冲读并记录警告。
mongos
支持非primary
读取偏好(read preference) 模式的 对冲读 。也就是说,如果使用非primary
读取偏好, mongos
可以向另一个成员发送额外的读取操作(如果可用)以对冲读取操作。 为对冲读取操作而发送的额外读取使用 maxTimeMSForHedgedReads
的maxTimeMS
值
以下操作支持对冲读:
要使用对冲读:
mongos
必须已启用对冲读取支持(默认)。请参阅readHedgingMode
参数。非
primary
读取偏好必须启用对冲读取。
读取偏好模式 | 选择进程 |
---|---|
primary (默认) |
|
| |
| |
| |
[1] | (1, 2) 默认阈值为 15 毫秒。 |