在抄本系列內,會追蹤每一個抄本的變更。這就是為什麼 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 完成其他變更。那些變更不包含在更新封包中。