Preocupação de leitura "majority"
Nesta página
Para operações de leitura não associadas atransações multidocumentos, a preocupação de leitura "majority"
garante que os dados lidos foram reconhecidos pela maioria dos membros do conjunto de réplicas. Os documentos lidos são duráveis e garantem que não sejam revertidos.
Para operações em transações multidocumento, a preocupação de leitura"majority"
fornece suas garantias somente se a transação for confirmada com a preocupação de gravação "maioria". Caso contrário, a preocupação de leitura "majority"
não oferece garantias sobre os dados lidos nas transações.
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.
Para obter mais informações sobre o que acontece se um primário falhar, consulte Failover automático.
Desempenho
Cada membro do conjunto de réplica mantém, em memória, uma visualização dos dados no ponto de confirmação da maioria; o ponto de confirmação da maioria é calculado pelo primário. Para atender à preocupação de leitura "majority"
, o nó retorna dados dessa visualização e é comparável em desempenho a outras preocupações de leitura.
Disponibilidade
A preocupação de leitura "majority"
está disponível para uso com ou sem sessões e transações causalmente consistentes.
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.Se você estiver usando um padrão global
"majority"
e a preocupação de gravação for menor que o tamanho da maioria, suas queries poderão retornar dados obsoletos (não totalmente replicados).
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 primary 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 | Hora T | Estado dos dados |
---|---|---|
Principal | Antes de 3 | Os dados refletem a gravação anterior |
Principal | Após t 3 | Os dados refletem Gravação 0 |
Secundário 1 | Antes de 5 | Os dados refletem a gravação anterior |
Secundário 1 | Após t 5 | Os dados refletem Gravação 0 |
Secundário 2 | Antes ou às 6 | Os dados refletem a gravação anterior |
Secundário 2 | Após t 6 | Os dados refletem Gravação 0 |
Suporte ao mecanismo de armazenamento
A preocupação de leitura "majority"
está disponível para o mecanismo de armazenamento WiredTiger.
Dica
O comando serverStatus
retorna o campo storageEngine.supportsCommittedReads
, que indica se o mecanismo de armazenamento suporta a preocupação de leitura "majority"
.
Leia "majority"
a preocupação e as transações
Observação
Você define a preocupação de leitura no nível da transação, não no nível da operação individual. Para definir a preocupação de leitura para transações, consulte Transações e preocupação de leitura.
Para operações em transações multidocumento, a preocupação de leitura "majority"
fornece suas garantias somente se a transação for confirmada com a preocupação de gravação "maioria". Caso contrário, a preocupação de leitura "majority"
não oferece garantias sobre os dados lidos nas transações.
Read concern "majority"
e agregação
Você pode especificar o nível de preocupação de leitura "majority"
para uma agregação que inclui um estágio de $out
.
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.Se você estiver usando um padrão global
"majority"
e a preocupação de gravação for menor que o tamanho da maioria, suas queries poderão retornar dados obsoletos (não totalmente replicados).