mongoDB的读写分离

概述

在副本集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. 使用的是1.10的C#驱动,mongodb是3.0.6

  2. /?readPreference=SecondaryPreferred

    readPreference参数

   primary:默认参数,只从主节点上进行读取操作;


      primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。


      secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。


      secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;


      nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据