在複本系列內,會追蹤每一個複本的變更。
這就是為什麼 oplog 項目會包含產生作業的複本之身分。
因此,複本系列的歷程可視同 oplog 項目的數個堆疊。
對於在該複本產生的作業而言,每一個堆疊是由一線性序列的 oplog ID 代表。
未抄寫的
資料庫的歷程是一線性序列的作業 (
圖 1)。
圖 2 顯示系列中的兩個複本的狀態:
- oplog ID 1–950 的作業已發生在複本 boston_hub。
- 作業 1–702 已發生在複本 sanfran_hub。
複本只有關於其本身作業的正確資料。等到它接收更新封包之後,其他複本的相關資訊即過期。
例如,複本 boston_hub 記錄 950 本端作業,但接收到只有 504 sanfran_hub 作業的更新封包。同樣地,複本 sanfran_hub 記錄
702 本端作業,但接收到只有 791 boston_hub 作業的更新封包。
圖 3 說明此實務練習,其中每一個複本在另一複本產生的作業都過期。
把複本系列看成一組 oplog 堆疊,如
圖 3所示,
即可輕易瞭解同步化處理程序。例如,從複本
boston_hub 傳送到複本
sanfran_hub 的更新封包是由複本
boston_hub(作業 792–950)的堆疊增量組成。
圖 4顯示兩種增量。
因為
sanfran_hub 知道它自己的狀態,所以它只需要更新在其他複本產生的作業。
(在某些錯誤更正狀況中,您必須重設複本關於其本身作業的資料。
)
註: 等到封包在 sanfran_hub 匯入時,已在 boston_hub 完成其他變更。那些變更不包含在更新封包中。