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節點,從網絡延遲最低的節點上讀取數據
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/k0h1kPOxDUG6R14HxEfAFA