MongoDB读取首选项-最接近vs标签集

时间:2018-09-17 18:32:03

标签: mongodb

我的MongoDB集群在3个DC中运行。

DC1-3个节点 DC2-3个节点 DC3-3个节点

还要在每个节点上运行我的应用程序。

我正在浏览MongoDB文档,并混淆了最近的黑白和标签集。

https://docs.mongodb.com/manual/reference/read-preference/

  

从地理分布的成员中查询,如果   副本集按地理位置分布,您可以创建副本   基于标签反映实例的位置,然后   配置您的应用程序以查询附近的成员。

     

例如,如果标记了“东”和“西”数据中心的成员   {'dc':'east'}和{'dc':'west'},您的应用程序服务器位于   东数据中心可以从附近的成员中读取以下内容   偏好:

     

db.collection.find()。readPref('nearest',[{'dc':'east'}])   尽管“最近”已经偏爱网络延迟较低的会员,   包括标记可使选择更加可预测。

基于我的理解。如果使用最近,则驱动程序将跟踪延迟(也{maxStalenessSeconds)来决定将流量发送到哪里。如果DC1过载或DC1的延迟不佳,驱动程序会将流量路由到其他DC。但是,如果使用标签集,则我们将强制使用本地DC,并且如果本地节点关闭,则本地应用程序将被视为关闭。为什么我们仍然建议标记集比最近的?

那么,驱动程序如何找到延迟和maxStalenessSecods?如何计算延迟?它会继续对集群中的每个节点执行ping操作吗?是否可以在根据延迟确定节点之前配置ping间隔和重试次数?

1 个答案:

答案 0 :(得分:0)

使用readPreference中的nearest时,可以指定maxStalenessSecods,例如100 。最小值应为90,否则会引发错误

延迟是在选择要查询的节点时计算的,因此它不会根据间隔进行ping操作。

有主要对象时:

  

客户可以通过比较   次要对象的最后一次写入

没有主服务器时:

  

通过比较辅助节点上次写入到辅助节点上最多的写入   最近写