概述
在副本集Replica Set中才涉及到ReadPreference的设置,默认情况下,读写都是分发都Primary节点执行,但是对于写少读多的情况,我们希望进行读写分离来分摊压力,所以希望使用Secondary节点来进行读取,Primary只承担写的责任(实际上写只能分发到Primary节点,不可修改)。
MongoDB有5种ReadPreference模式:.
primary: 主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。
primaryPreferred:首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。
secondary:从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。
secondaryPreferred:首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。
nearest:最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。
副本集连接字符串
mongodb建议副本集中的机器数量为奇数,即至少需要3台实例
1.读
mongodb://secondary.com/?SlaveOk=true
2.写
mongodb://primary.com
路由集群连接字符串
mongodb://S1Router.com:27018,S2Router.com:27018,S3Router.com:27018/?readPreference=SecondaryPreferred
C#驱动
-
使用的是1.10的C#驱动,mongodb是3.0.6
-
/?readPreference=SecondaryPreferred
readPreference参数
primary:默认参数,只从主节点上进行读取操作;
primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。
secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。
secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;
nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据