Em uma família de réplicas, as alterações são rastreadas para cada réplica.
Isso ocorre porque uma entrada de oplog inclui a identidade da réplica em que a
operação foi originada. Portanto, o histórico de uma família de réplicas pode ser visualizado
como várias pilhas de entradas de oplog. Cada pilha é representada por uma seqüência linear
de IDs de oplog para as operações que se originam nessa réplica.
O histórico de um
banco de dados
não replicado é uma seqüência linear de operações (
Figura 1).
Figura 1. Histórico de Alterações em um Banco de Dados
Figura 2 mostra o
estado de duas réplicas em uma família:
- As operações com IDs de oplog 1–950 ocorreram na réplica boston_hub.
- As operações 1–702 ocorreram na réplica sanfran_hub.
Figura 2. Estado de uma Família
Uma réplica tem dados precisos apenas sobre suas próprias operações. Até que ela receba
pacotes de atualização, suas informações sobre outras réplicas permanecerão desatualizadas. Por exemplo,
a réplica boston_hub registra 950 operações locais, mas recebeu pacotes de atualização
para apenas 504 operações de sanfran_hub. De modo semelhante, a réplica sanfran_hub registra
702 operações locais, mas recebeu pacotes de atualização para apenas 791 operações de boston_hub.
Figura 3 ilustra
esse cenário, no qual cada réplica está desatualizada em relação às operações
que se originam na outra réplica.
Figura 3. Réplicas Desatualizadas
A representação de uma família de réplicas como um conjunto de pilhas de oplog, mostrada em
Figura 3,
facilita a compreensão do processo de sincronização. Por exemplo, um pacote de atualização
enviado da réplica
boston_hub para a réplica
sanfran_hub consiste em
incrementos para a pilha da réplica
boston_hub (operações 792–950).
Figura 4 mostra os dois incrementos.
Como
sanfran_hub conhece seu próprio estado, ele precisa de atualizações somente para
operações que se originam em outras réplicas. (Em determinadas situações de recuperação de erro,
é necessário reconfigurar os dados de uma réplica sobre suas próprias operações. )
Figura 4. Atualizações entre Duas Réplicas
Nota: No momento em que o pacote foi importado em sanfran_hub, alterações
adicionais podem ter sido feitas em boston_hub. Essas alterações não estão incluídas
no pacote de atualização.