mongodb oplog與數據同步


1. 復制集(Replica sets)模式時,其會使用下面的local數據庫
local.system.replset 用於復制集配置對象存儲 (通過shell下的rs.conf()或直接查詢)
local.oplog.rs 一個capped collection集合.可在命令行下使用--oplogSize 選項設置該集合大小尺寸.
local.replset.minvalid 通常在復制集內使用,用於跟蹤同步狀態(sync status)

2. 主從復制模式(Master/Slave)
* Master
o local.oplog.$main 存儲"oplog"信息
o local.slaves 存儲在master結點上相應slave結點的同步情況(比如syncTo時間戳等)
* Slave
o local.sources 從結點所要鏈接的master結點信息(可通過--source配置參數指定)
* Other
o local.me 未知待查:)
o local.pair.* (replica pairs選項,目前已不推薦使用)

3. 還有oplog的數據結構(存儲在local.oplog.$main)

{ ts : ..., op: ..., ns: ..., o: ... o2: ... }

上面就是一條oplog信息,復制機制就是通過這些信息來進行節點間的數據同步並維護數據一致性的,其中:
ts:8字節的時間戳,由4字節unix timestamp + 4字節自增計數表示。
這個值很重要,在選舉(如master宕機時)新primary時,會選擇ts最大的那個secondary作為新primary。
op:1字節的操作類型,例如i表示insert,d表示delete。
ns:操作所在的namespace。
o:操作所對應的document,即當前操作的內容(比如更新操作時要更新的的字段和值)
o2: 在執行更新操作時的where條件,僅限於update時才有該屬性
其中op,可以是如下幾種情形之一:
"i": insert
"u": update
"d": delete
"c": db cmd
"db":聲明當前數據庫 (其中ns 被設置成為=>數據庫名稱+ '.')
"n": no op,即空操作,其會定期執行以確保時效性

  • ts: the time this operation occurred.
  • h: a unique ID for this operation. Each operation will have a different value in this field.
  • op: the write operation that should be applied to the slave. n indicates a no-op, this is just an informational message.
  • ns: the database and collection affected by this operation. Since this is a no-op, this field is left blank.
  • o: the actual document representing the op. Since this is a no-op, this field is pretty useless.
  • for the update, there are two o fields (o and o2). o2 give the update criteria and o gives the modifications (equivalent to update()‘s second argument).

4. 同步系統設計

mongoDB oplog的說明:

如果需要及時獲取mongoDB的增量信息,就可以應用oplog了!

常用的場景模式:索引更新,主動更新緩存等。

通常一個服務監控oplog,將“增量信息”經過一定的處理后塞到ActiveMQ中,相關的應用程序再從ActiveMQ中獲取消息進行消費。

注意點:

1)如果當前服務斷掉了,要有個斷點機制,下次可以接着來。這個主要是對ts字段進行控制。

因此需要實時記錄讀到了什么位置。

2)如果應用端是異構的,采用一種跨語言的協議,例如json。

3)消息中間件(ActiveMQ)起到解耦、緩沖的作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM