Read concern "majority"
Nesta página
For read operations not associated with multi-document
transactions, read concern "majority"
guarantees that the data read has been acknowledged by a majority of
the replica set members. The documents read are durable and
guaranteed to not roll back.
For operations in multi-document transactions, read concern "majority"
provides its
guarantees only if the transaction commits with write concern
"majority". Otherwise, the
"majority"
read concern provides no guarantees about the
data read in transactions.
Independentemente do nível de read concern, os dados mais recentes em um nó podem não refletir a versão mais recente dos dados no sistema.
For more information about what happens if a primary fails, see Automatic Failover.
Desempenho
Each replica set member maintains, in memory, a view of the data at the
majority-commit point; the majority-commit point is calculated by the
primary. To fulfill read concern "majority"
, the node returns data
from this view and is comparable in performance to other read
concerns.
Disponibilidade
preocupação de leitura "majority"
is available for use with or
without causally consistent sessions and transactions.
Aviso
Se você estiver usando uma arquitetura PSA (primária-secundária-arbiter) de três membros, considere o seguinte:
A preocupação de gravação
"majority"
pode causar problemas de desempenho se um secundário não estiver disponível ou estiver atrasado. Para obter conselhos sobre como mitigar esses problemas, consulte Atenuar problemas de desempenho com um conjunto de réplicas de PSA autogerenciado.If you are using a global default
"majority"
and the write concern is less than the size of the majority, your queries may return stale (not fully replicated) data.
Exemplo
Considere a seguinte linha do tempo de uma operação de gravação Escrever 0 para um conjunto de réplicas de três membros:
Observação
Para simplificar, o exemplo pressupõe:
Todas as gravações anteriores à gravação 0 foram replicadas com sucesso para todos os membros.
Escrever prev é a escrita anterior antes de Escrever 0.
Nenhuma outra gravação ocorreu após Write 0.
Hora | Evento | Escrita mais recente | Mais recente w: escrita da "maioria" |
---|---|---|---|
t 0 | Primário aplica Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 1 | O secundário 1 aplica a gravação 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 2 | O secundário 2 aplica a escrita 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 3 | O Primário está ciente do sucesso da replicação para o Secundário 1 e envia uma confirmação ao cliente | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 4 | O primário está ciente da replicação bem-sucedida para o secundário 2 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 5 | O secundário 1 recebe um aviso (por meio de mecanismo de replicação regular) para atualizar o snapshot de sua gravação w: "maioria" mais recente | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev |
t 6 | O secundário 2 recebe um aviso (por meio do mecanismo de replicação regular) para atualizar seu snapshot do w mais recente: "majority" write | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 |
Depois, as tabelas a seguir resumem o estado dos dados que uma operação de leitura com a preocupação de leitura "majority"
veria no momento T
.
Meta de leitura | Tempo T | Estado dos dados |
---|---|---|
Principal | Antes de t 3 | Os dados refletem a gravação anterior |
Principal | Depois de t 3 | Os dados refletem a gravação 0 |
secundário 1 | Antes de t 5 | Os dados refletem a gravação anterior |
secundário 1 | Depois de t 5 | Os dados refletem a gravação 0 |
secundário 2 | Before or at t 6 | Os dados refletem a gravação anterior |
secundário 2 | Depois de t 6 | Os dados refletem a gravação 0 |
Storage Engine Support
preocupação de leitura "majority"
is available for the
WiredTiger storage engine.
Dica
The serverStatus
command returns the
storageEngine.supportsCommittedReads
field, which
indicates whether the storage engine supports "majority"
read
concern.
Preocupação de leitura "majority"
and Transactions
Observação
You set the read concern at the transaction level, not at the individual operation level. To set the read concern for transactions, see Transações e preocupação de leitura.
For operations in multi-document transactions, read concern "majority"
provides its
guarantees only if the transaction commits with write concern
"majority". Otherwise, the
"majority"
read concern provides no guarantees about the
data read in transactions.
Preocupação de leitura "majority"
and Aggregation
You can specify read concern level
"majority"
for an aggregation that includes an $out
stage.
Leia seus próprios escritos
Você pode usar sessões causalmente consistentes para ler suas próprias gravações, se as gravações solicitarem confirmação.
Conjuntos de réplicas Primary-Secondary-Arbiter
A partir do MongoDB 5.0, enableMajorityReadConcern
e --enableMajorityReadConcern
não podem ser alterados e são sempre definidos como true
devido a melhorias no mecanismo de armazenamento.
Em versões anteriores do MongoDB, enableMajorityReadConcern
e --enableMajorityReadConcern
são configuráveis e podem ser configurados como false
para evitar que a pressão do cache de armazenamento imobilize um sistema com uma arquitetura PSA (primary-secondary-arbiter) de três membros.
Se você estiver usando uma arquitetura PSA (primária-secundária-arbiter) de três membros, considere o seguinte:
A preocupação de gravação
"majority"
pode causar problemas de desempenho se um secundário não estiver disponível ou estiver atrasado. Para obter conselhos sobre como mitigar esses problemas, consulte Atenuar problemas de desempenho com um conjunto de réplicas de PSA autogerenciado.If you are using a global default
"majority"
and the write concern is less than the size of the majority, your queries may return stale (not fully replicated) data.