Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Consistência causal e write and read concerns

Comas sessões de cliente causalmente consistentes do MongoDB, diferentes combinações de preocupações de leitura e gravação fornecem diferentes garantias de consistência causal.

A tabela a seguir indica as garantias específicas fornecidas por diferentes combinações:

Preocupação de leitura
Escreva preocupação
Ler as próprias gravações
Leituras monotônicas
Escritas monotônicas
Escritas que seguem as leituras

Se você quiser consistência causal com durabilidade de dados, então, como visto na tabela, somente as operações de leitura com read concern "majority" e as operações de escrita com write concern "majority" podem garantir as quatro garantias de consistência causal. Ou seja, sessões de clientes com consistência causal só podem garantir a consistência causal para:

  • Operações de leitura com read concern "majority"; Em outras palavras, as operações de leitura que retornam dados que foram reconhecidos pela maioria dos membros do conjunto de réplicas e são duráveis.

  • Operações de gravação com preocupação de gravação "majority"; ou seja, as operações de gravação que solicitam a confirmação de que a operação foi aplicada à maioria dos nós votantes do conjunto de réplicas.

Se você quiser consistência causal sem durabilidade de dados (o que significa que as gravações podem ser revertidas), as operações de gravação com preocupação de gravação { w: 1 } também poderão fornecer consistência causal.

Observação

As outras combinações de read e write concerns também podem satisfazer as quatro garantias de consistência causal em algumas situações, mas não necessariamente em todas as situações.

A preocupação de leitura "majority" e a preocupação de gravação "majority" asseguram que as quatro garantias de consistência causal sejam mantidas mesmo em circunstâncias (como em uma partição de rede) em que dois membros em um conjunto de réplicas acreditam transitoriamente que são os principais. E embora ambos os primários possam concluir gravações com { w: 1 } preocupação de gravação, apenas um primário será capaz de concluir gravações com "majority" preocupação de gravação.

Por exemplo, considere uma situação em que uma partição de rede divide um conjunto de réplica de cinco membros:

Partição de rede: novo primary escolhido por um lado, mas o antigo primary ainda não renunciou.

Exemplo

Com a partição acima

  • As escritas com write concern "majority" podem ser concluídas em P new, mas não podem ser concluídas em P old.

  • As gravações com preocupação de gravação { w: 1 } podem ser concluídas em P antigo ou P novo. No entanto, as gravações em P antigas (bem como as gravações replicadas para S 1) são revertidas quando esses membros recuperam a comunicação com o restante do conjunto de réplicas.

  • Depois de uma gravação bem-sucedida com "majority" preocupação de gravação em P novas e causalmente consistentes com "majority" preocupação de gravação pode observar a escrita em P novo, S 2 e S 3. As leituras também podem observar a gravação em P antigo e S 1, uma vez que podem se comunicar com o resto do conjunto de réplicas e sincronizar com os outros membros do conjunto de réplicas. Quaisquer gravações feitas em P antigo e/ou replicadas em S 1 durante a partição serão revertidas.

Para ilustrar os requisitos de read e write concern, nos exemplos a seguir, um cliente realiza uma sequência de operações com diferentes combinações de read e write concerns no conjunto de réplicas:

O uso de "majority" de preocupação de leitura e "majority" de preocupação de escrita em uma sessão causalmente consistente fornece as seguintes garantias de consistência causal:

✅ Ler as próprias escritas ✅ Leituras monotônicas ✅ Escritas monotônicas ✅ As escritas seguem as leituras

Observação

Cenário 1 (Leia Preocupação "maioria" e Preocupação de Gravação "maioria")

Durante o período transitório com dois primaries, como somente P new pode realizar escritas com write concern { w: "majority" }, uma sessão de cliente pode emitir a seguinte sequência de operações com sucesso:

Sequência
Exemplo
1. Write 1 with write concern "majority" to P new
2. Read 1 with read concern "majority" to S 2
3. Write 2 with write concern "majority" to P new

4. Read 2 with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado dos dados com duas primárias usando preocupação de leitura maioria e preocupação de gravação maioria
clique para ampliar

Ler as próprias gravações

Read 1 reads data from S 2 that reflects a state after Write 1.
Read 2 reads data from S 3 that reflects a state after Write 1 followed by Write 2.

Leituras monotônicas

A leitura 2 lê dados de S 3 que refletem um estado após a leitura 1.

Escritas monotônicas

A escrita 2 atualiza dados em P novos que reflitam um estado após a gravação 1.

Escritas que seguem as leituras

A gravação 2 atualiza os dados no P novo que reflete um estado dos dados após a leitura 1 (o que significa que um estado anterior reflete a leitura dos dados pela gravação 1).

Observação

Cenário 2 (Preocupação de leitura "maioria" e Preocupação de gravação "maioria")

Considere uma sequência alternativa em que a leitura 1 com a preocupação de leitura "majority" é direcionado para S 1:

Sequência
Exemplo
1. Write 1 with write concern "majority" to P new
2. Read 1 with read concern "majority" to S 1
3. Write 2 with write concern "majority" to P new

4. Read 2 with with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.

Nessa sequência, a leitura 1 não pode retornar até que o ponto de confirmação da maioria tenha avançado sobre P antigo. Isso não pode ocorrer até que P o antigo e S 1 possam se comunicar com o restante do conjunto de réplicas; nesse momento, P antigo deixou o cargo (se ainda não houver) e os dois membros sincronizam (incluindo Gravação 1) dos outros membros do conjunto de réplicas.

Ler as próprias gravações

Read 1 reflects a state of data after Write 1, albeit after the network partition has healed and the member has sync'ed from the other members of the replica set.
Read 2 reads data from S 3 that reflects a state after Write 1 followed by Write 2.

Leituras monotônicas

A leitura 2 lê dados da S 3 que refletem um estado após a leitura 1 (o que significa que um estado anterior é refletido nos dados lidos pela leitura 1).

Escritas monotônicas

A escrita 2 atualiza dados em P novos que reflitam um estado após a gravação 1.

Escritas que seguem as leituras

A gravação 2 atualiza os dados no P novo que reflete um estado dos dados após a leitura 1 (o que significa que um estado anterior reflete a leitura dos dados pela gravação 1).

O uso da read concern "majority" e da write concern { w: 1 } em uma sessão com consistência causal fornece as seguintes garantias de consistência causal se você quiser consistência causal com durabilidade de dados:

✅ Ler as próprias escritas ✅ Leituras monotônicas ✅ Escritas monotônicas ✅ As escritas seguem as leituras

Se você quiser consistência causal sem durabilidade de dados:

✅ Ler as próprias escritas ✅ Leituras monotônicas ✅ Escritas monotônicas ✅ As escritas seguem as leituras

Observação

Cenário 3 (Preocupação de leitura "maioria" e Preocupação de gravação {w: 1})

Durante o período transitório com dois primários, como P antigo e P novo podem realizar gravações com relação à gravação { w: 1 }, uma sessão de cliente pode emitir a seguinte sequência de operações com sucesso, mas não ser causalmente consistente se você quiser consistência causal com durabilidade de dados:

Sequência
Exemplo
1. Write 1 with write concern { w: 1 } to P old
2. Read 1 with read concern "majority" to S 2
3. Write 2 with write concern { w: 1 } to P new

4. Read 2 with with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado dos dados com dois primários usando preocupação de leitura maioria e preocupação de gravação 1
clique para ampliar

Nesta sequência,

  • A leitura 1 não pode retornar até que o ponto de confirmação da maioria tenha avançado em P novo após a hora da gravação 1.

  • A leitura 2 não pode retornar até que o ponto de confirmação da maioria tenha avançado em P novo após a hora da gravação 2.

  • A gravação 1 será revertida quando a partição da rede for curada.

Se você quiser consistência causal com durabilidade de dados

Leia suas próprias escritas

A leitura 1 lê dados de S 2 que não refletem um estado após a gravação 1.

Leituras monotônicas

A leitura 2 lê dados da S 3 que refletem um estado após a leitura 1 (o que significa que um estado anterior é refletido nos dados lidos pela leitura 1).

Escritas monotônicas

A gravação 2 atualiza os dados em P novo que não reflete um estado após a gravação 1.

Escritas que seguem as leituras

A gravação 2 atualiza os dados em P novo que reflete um estado após a leitura 1 (o que significa que um estado anterior reflete os dados lidos pela leitura 1).

Se você quiser consistência causal sem durabilidade de dados

Ler as próprias gravações

A leitura 1 lê dados de S 2 que refletem 1 1um estado equivalente à gravação seguido de reversão da gravação .

Leituras monotônicas

A leitura 2 lê dados da S 3 que refletem um estado após a leitura 1 (o que significa que um estado anterior é refletido nos dados lidos pela leitura 1).

Escritas monotônicas

Gravar 2 atualiza dados em P novo que é equivalente a após a Gravação 1 seguido pela reversão da Gravação 1.

Escritas que seguem as leituras

Gravar 2 atualiza dados em P novo que reflete um estado após a Leitura 1 (ou seja, cujo estado anterior reflete os dados lidos pela Leitura 1 ).

Observação

Cenário 4 (Preocupação de leitura "maioria" e Preocupação de gravação {w: 1})

Considere uma sequência alternativa em que a leitura 1 com a preocupação de leitura "majority" é direcionado para S 1:

Sequência
Exemplo
1. Write 1 with write concern { w: 1 } to P old
2. Read 1 with read concern "majority" to S 1
3. Write 2 with write concern { w: 1 } to P new

4. Read 2 with with read concern "majority" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.

Nesta sequência:

  • A leitura 1 não pode retornar até que o ponto de confirmação majoritário tenha avançado em S 1. Isso não pode ocorrer até que P antigo e S 1 possam se comunicar com o resto do conjunto de réplicas. Nesse momento, P antigo foi desativado (se ainda não), Gravação 1 é revertido de P antigo e S 1 e os dois membros são sincronizados com os outros membros do conjunto de réplicas.

Se você quiser consistência causal com durabilidade de dados

Leia suas próprias escritas

Os dados lidos pela Leitura 1 não refletem os resultados da Gravação 1, que foi revertida.

Leituras monotônicas

A leitura 2 lê dados de S 3 que refletem um estado após a leitura 1 (ou seja, cujo estado anterior reflete os dados lidos pela leitura 1).

Escritas monotônicas

A gravação 2 atualiza os dados em P novo que não reflete um estado após a gravação 1, que tinha precedido a gravação 2, mas voltou atrás.

Escritas que seguem as leituras

Gravar 2 atualiza dados em P novo que reflete um estado após a Leitura 1 (ou seja, cujo estado anterior reflete os dados lidos pela Leitura 1 ).

Se você quiser consistência causal sem durabilidade de dados

Ler as próprias gravações

A Leitura 1 retorna dados que refletem o resultado final da Gravação 1 , já que a Gravação 1 é revertida.

Leituras monotônicas

A leitura 2 lê dados de S 3 que refletem um estado posterior à leitura 1 (o que significa que um estado anterior reflete os dados lidos pela leitura 1).

Escritas monotônicas

Gravar 2 atualiza dados em P novo que é equivalente a após a Gravação 1 seguido pela reversão da Gravação 1.

Escritas que seguem as leituras

A gravação 2 atualiza os dados em P novo que reflete um estado após a leitura 1 (o que significa que um estado anterior reflete os dados lidos pela leitura 1).

O uso de "local" de preocupação de leitura e preocupação de escrita { w: 1 } em uma sessão causalmente consistente não pode garantir consistência causal.

✅ Ler as próprias escritas ✅ Leituras monotônicas ✅ Escritas monotônicas ✅ As escritas seguem as leituras

Essa combinação pode satisfazer as quatro garantias de consistência causal em algumas situações, mas não necessariamente em todas.

Observação

Cenário 5 (Preocupação de leitura "local" e Preocupação de Gravação {w: 1})

Durante esse período transitório, como P old e P new podem realizar gravações com write concern { w: 1 }, uma sessão de cliente pode emitir a seguinte sequência de operações com sucesso, mas sem consistência causal:

Sequência
Exemplo
1. Write 1 with write concern { w: 1 } to P old
2. Read 1 with read concern "local" to S 1
3. Write 2 with write concern { w: 1 } to P new

4. Read 2 with read concern "local" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado dos dados com dois primaries usando read concern local e write concern 1
clique para ampliar

❌ Ler as próprias escritas

A leitura 2 lê dados de S 3 que refletem somente um estado após a gravação 2 e não a gravação 1 seguido pela gravação 2.

❌ Leituras monotônicas

A leitura 2 lê dados de S 3 que não refletem um estado após Ler 1 (o que significa que um estado anterior não refletem os dados lidos por Ler 1).

❌ Escritas monotônicas

A gravação 2 atualiza os dados em P novo que não reflete um estado após a gravação 1.

❌ Escrever, seguir, ler

A gravação 2 atualiza os dados em P novo que não reflete um estado após a leitura 1 (o que significa que um estado anterior não reflete os dados lidos pela leitura 1).

O uso de "local" de preocupação de leitura e "majority" de preocupação de escrita em uma sessão causalmente consistente fornece as seguintes garantias de consistência causal:

✅ Ler as próprias escritas ✅ Leituras monotônicas ✅ Escritas monotônicas ✅ As escritas seguem as leituras

Essa combinação pode satisfazer as quatro garantias de consistência causal em algumas situações, mas não necessariamente em todas.

Observação

Cenário 6 (Preocupação de leitura "local" e Preocupação de gravação "maioria")

Durante esse período transitório, como somente P new pode realizar escritas com write concern { w: "majority" }, uma sessão de cliente pode emitir a seguinte sequência de operações com sucesso, mas sem consistência causal:

Sequência
Exemplo
1. Write 1 with write concern "majority" to P new
2. Read 1 with read concern "local" to S 1
3. Write 2 with write concern "majority" to P new

4. Read 2 with read concern "local" to S 3
For item A, update qty to 50.
Read item A.
For items with qty less than or equal to 50,
update restock to true.
Read item A.
Estado dos dados com dois primários usando preocupação de leitura local e preocupação de gravação maioria
clique para ampliar

❌ Ler as próprias escritas.

Read 1 lê dados de S 1 que não refletem um estado após o Write 1.

❌ Leituras monotônicas.

A leitura 2 lê dados de S 3 que não refletem um estado após Ler 1 (o que significa que um estado anterior não refletem os dados lidos por Ler 1).

✅ Escritas monotônicas.

A escrita 2 atualiza dados em P novos que reflitam um estado após a gravação 1.

❌ Escrever, seguir, ler.

A gravação 2 atualiza os dados em P novo que não reflete um estado após a leitura 1 (o que significa que um estado anterior não reflete os dados lidos pela leitura 1).

Voltar

Isolamento de leitura, consistência e atualidade