每一個抄本的作業追蹤

在抄本系列內,會追蹤每一個抄本的變更。這就是為什麼 oplog 項目會包含產生作業的抄本之身分。因此,抄本系列的歷程可視同 oplog 項目的數個堆疊。對於在該抄本產生的作業而言,每一個堆疊是由一線性序列的 oplog ID 代表。
未抄寫的資料庫的歷程是一線性序列的作業(圖 1)。
圖 1. 資料庫變更的歷程
圖 2 顯示系列中的兩個抄本的狀態:

抄本只有關於其本身作業的正確資料。等到它接收更新封包之後,其他抄本的相關資訊即過期。例如,抄本 boston_hub 記錄 950 本端作業,但接收到只有 504 sanfran_hub 作業的更新封包。同樣地,抄本 sanfran_hub 記錄 702 本端作業,但接收到只有 791 boston_hub 作業的更新封包。

圖 3 說明此實務,其中每一個抄本在另一抄本產生的作業都過期。
圖 3. 過期抄本
把抄本系列看成一組 oplog 堆疊,如圖 3 所示,即可輕易瞭解同步化處理程序。例如,從抄本 boston_hub 傳送到抄本 sanfran_hub 的更新封包是由抄本 boston_hub(作業 792–950)的堆疊增量組成。圖 4 顯示兩種增量。因為 sanfran_hub 知道它自己的狀態,所以它只需要更新在其他抄本產生的作業。(在某些錯誤更正狀況中,您必須重設抄本關於其本身作業的資料。)
圖 4. 兩抄本之間的更新資料
註: 等到封包在 sanfran_hub 匯入時,已在 boston_hub 完成其他變更。那些變更不包含在更新封包中。

意見