Innerhalb einer Replikatfamilie werden Änderungen für alle Replikate protokolliert.
Aus diesem
Grund enthält ein oplog-Eintrag die Identität des Replikats, auf dem die Operation ursprünglich
stattgefunden hat. Folglich lässt sich das Protokoll einer Replikatfamilie als eine Reihe
von Stapeln darstellen, die aus den einzelnen oplog-Einträgen bestehen. Jeder Stapel
enthält eine lineare Folge der oplog-IDs für die Operationen, die dem jeweiligen Replikat
entstammen.
Das Protokoll einer nicht replizierten
Datenbank ist eine lineare
Operationsfolge (
Abbildung 1).
Abbildung 1. Änderungsprotokoll einer Datenbank
Abbildung 2 zeigt den Status von zwei Replikaten
einer Familie:
- Die Operationen mit den oplog-IDs 1 bis 950 haben auf dem Replikat boston_hub stattgefunden.
- Die Operationen 1 bis 702 haben auf dem Replikat sanfran_hub stattgefunden.
Abbildung 2. Status einer Familie
Ein Replikat enthält immer nur für seine eigenen Operationen zuverlässige Daten. Die Informationen
zu anderen Replikaten sind so lange nicht auf dem neuesten Stand, bis das Replikat Aktualisierungspakete
empfängt. Beispiel: Das Replikat boston_hub protokolliert 950 lokale
Operationen, hat aber nur zu 504 Operationen von sanfran_hub Aktualisierungspakete empfangen. Umgekehrt hat das Replikat sanfran_hub
702 lokale Operationen aufgezeichnet, jedoch für 791 Operationen von boston_hub Aktualisierungspakete empfangen.
Dieses Szenario, in dem beide Replikate bezüglich der auf dem jeweils anderen Replikat
stattgefundenen Operationen nicht auf dem neuesten Stand sind, wird in
Abbildung 3 veranschaulicht.
Abbildung 3. Replikate, die nicht auf dem neuesten Stand sind
Die Darstellung einer Replikatfamilie
als eine Reihe von oplog-Stapeln (siehe
Abbildung 3)
vereinfacht das Verständnis des Synchronisationsprozesses. Beispiel: Ein
Aktualisierungspaket von Replikat
boston_hub an Replikat
sanfran_hub enthält Inkremente des Stapels für Replikat
boston_hub (Operationen 792 bis 950).
Abbildung 4 zeigt die zwei Inkremente.
Da
sanfran_hub seinen eigenen Status kennt, benötigt es nur die Aktualisierungen, die
anderen Replikaten entstammen. In einigen Situationen ist es zur Fehlerbehebung
erforderlich, die Daten eines Replikats zu seinen eigenen Operationen zurückzusetzen.
Abbildung 4. Aktualisierungen zwischen zwei Replikaten
Anmerkung: Bis das Paket auf sanfran_hub importiert
wird, haben auf boston_hub weitere Änderungen stattgefunden. Diese Änderungen sind nicht im Aktualisierungspaket enthalten.