각 복제본의 오퍼레이션 추적

복제본 패밀리에서 각 복제본의 변경사항이 추적됩니다. 이 이유로 인해 oplog 항목에 오퍼레이션이 시작된 복제본의 ID가 포함됩니다. 따라서, 복제본 패밀리의 히스토리는 여러 oplog 항목 스택으로 표시될 수 있습니다. 각 스택은 해당 복제본에서 시작된 오퍼레이션에 대해 선형 시퀀스의 oplog ID로 표시됩니다.
복제되지 않은 데이터베이스의 히스토리는 선형 시퀀스의 오퍼레이션입니다(그림 1).
그림 1. 데이터베이스 변경 히스토리
그림 2는 패밀리에 있는 두 복제본의 상태를 표시합니다.

복제본에는 고유 오퍼레이션에 대해서만 정확한 데이터가 있습니다. 업데이트 패킷을 수신할 때까지 다른 복제본에 대한 정보는 최신이 아닙니다. 예를 들어, boston_hub 복제본이 950개의 로컬 오퍼레이션을 기록했지만 504개의 sanfran_hub 오퍼레이션에 대해서만 업데이트 패킷을 수신했습니다. 마찬가지로, sanfran_hub 복제본이 702개의 로컬 오퍼레이션을 기록했지만 791개의 boston_hub 오퍼레이션만을 수신했습니다.

그림 3는 다른 복제본에서 시작된 오퍼레이션과 관련하여 각 복제본이 최신이 아닌 이 시나리오에 대해 설명합니다.
그림 3. 오래된 복제본
그림 3에 표시된 바와 같이 복제본 패밀리를 oplog 스택 세트로 상상하면 동기하 프로세스를 이해하기가 쉬워집니다. 예를 들어, boston_hub 복제본에서 sanfran_hub 복제본으로 송신된 업데이트 패킷은 boston_hub 복제본의 스택 증가분으로 구성됩니다(792–950 오퍼레이션). 그림 4가 두 개의 증가분을 표시합니다. sanfran_hub가 해당 상태를 알고 있으므로 다른 복제본에서 시작된 오퍼레이션의 업데이트만 필요합니다. (일정 오류 복구 상황에서 해당 오퍼레이션에 대한 복제본의 데이터를 재설정해야 합니다. )
그림 4. 두 복제본 사이 업데이트
주: sanfran_hub에서 패킷을 가져올 때 쯤에 boston_hub에 추가 사항이 변경되었을 수 있습니다. 해당 변경사항은 업데이트 패킷에 포함되지 않습니다.

피드백