关于mongodb doc,使用最近模式进行读取, 驱动程序从网络延迟落在可接受的延迟窗口内的成员读取。然而,该文档并未说明具体的“网络延迟”是什么。
有谁知道它是如何评估的?使用ping往返时间或平均查询时间或通过某些特定查询?
答案 0 :(得分:0)
有谁知道它是如何评估的?使用ping往返时间或平均查询时间或通过某些特定查询?
以下内容适用于MongoDB v3.2,v3.4和当前版本v3.6。基于MongoDB Specifications: Server Selection:
对于每个可用的服务器,客户端(即驱动程序)必须跟踪服务器监视isMaster命令的平均往返时间(RTT)。当服务器没有平均RTT时,必须将平均RTT设置为等于第一个RTT测量值(即服务器可用后的第一个isMaster
命令)。
在第一次测量之后,必须使用指数加权移动平均公式计算平均RTT,加权因子(α)为0.2。如果先前的平均值表示为(old_rtt
),则使用以下公式从新的RTT度量(new_rtt
)计算新的平均值(x
):
alpha = 0.2
new_rtt = alpha * x + (1 - alpha) * old_rtt
在最近的9次观察中,选择加权因子0.2来计算平均RTT重量的85%。
另见Blog: Server Selection in Next Generation MongoDB Drivers。
您可能也对selecting servers within the latency window:
感兴趣在几个合适的服务器之间进行选择时,延迟窗口是从最短RTT到最短RTT加上本地阈值的可接受RTT的范围。例如。如果最短RTT为15ms
且本地阈值为200ms
,则延迟窗口的范围为15ms - 215ms
。
例如,MongoDB Python driver (PyMongo)默认情况下,localThresholdMS
的值为15ms
,这意味着只有ping时间在15ms-30ms
内的成员才会用于查询。