每一個複本的作業追蹤

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

意見