ITPub博客

首页 > 数据库 > 数据库开发技术 > mongoDB的读写分离

mongoDB的读写分离

原创 数据库开发技术 作者:后端Q 时间:2024-01-12 08:00:00 0 删除 编辑

概述

在副本集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节点,从网络延迟最低的节点上读取数据


原文作者:后端Q;如有侵权,请联系管理员删除。

上一篇: C# 队列(Queue)
请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    726079