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

Preocupação de leitura "snapshot"

Nesta página

  • operações
  • Limitação de isolamento de snapshots
  • Read Concern e Transações
  • Read Concern e atClusterTime
  • Leia sobre as coleções com capas

Alterado na versão 5.0.

Uma query com preocupação de leitura "snapshot" retorna dados comprometidos pela maioria como aparece nos fragmentos a partir de um único ponto específico no passado recente. A Read concern "snapshot" fornece suas garantias somente se a transação se ligar com a preocupação de gravação "majority".

A read concern "snapshot" está disponível para transações com vários documentos e, a partir do MongoDB 5.0, certas operações de leitura fora das transações com vários documentos.

  • Se a transação não fizer parte de uma sessão causalmente consistente, após a confirmação da transação com write concern "majority", é garantido que as operações de transação tenham lido a partir de um snapshot dos dados comprometidos pela maioria.

  • Se a transação fizer parte de uma sessão causalmente consistente, após o commit da transação com a write concern "majority", as operações da transação terão a garantia de ter lido de um snapshot de dados comprometidos pela maioria que fornece consistência causal com a operação imediatamente anterior ao início da transação.

Além de transações de vários documentos, a read concern "snapshot" está disponível em primários e secundários para as seguintes operações de leitura:

Todos os outros comandos de leitura proíbem "snapshot".

Para obter uma lista de todas as operações que aceitam preocupações de leitura, consulte Operações que suportam preocupações de leitura.

As operações de leitura com read concern "snapshot" garantem o isolamento do snapshot somente na ausência de operações simultâneas de descarte ou renomeação em collections na operação de leitura. Na maioria dos casos, o MongoDB detecta quando uma operação remove uma coleção à frente do instantâneo de leitura e relata um erro SnapshotUnavailable . Se essa detecção não for possível, a operação de leitura refletirá a collection descartada ou renomeada mesmo que a collection existisse durante o momento do snapshot. Essa limitação se aplica a todas as read concerns para operações dentro e fora de uma transação de vários documentos.

As transação de documento suportam a preocupação de leitura "snapshot", bem como "local" e "majority".

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.

Novidades na versão 5.0.

Fora das transações de vários documentos, as leituras com preocupação de leitura "snapshot" são compatíveis com o parâmetro opcional atClusterTime. O parâmetro atClusterTime permite a você especificar o carimbo de data/hora para a leitura. Para satisfazer uma solicitação de leitura com um atClusterTime de T especificado, o mongod executa a solicitação com base nos dados disponíveis no tempo T.

Você pode obter o operationTime ou clusterTime de uma operação a partir da resposta de db.runCommand() ou do objeto Session() .

O comando a seguir executa uma operação de localização com "snapshot" de preocupação de leitura e especifica que a operação deve ler dados do snapshot no momento do cluster Timestamp(1613577600, 1).

db.runCommand( {
find: "restaurants",
filter: { _id: 5 },
readConcern: {
level: "snapshot",
atClusterTime: Timestamp(1613577600, 1)
},
} )

Se o parâmetro atClusterTime não for fornecido, o mongos, ou em conjuntos de réplicas de um único membro mongod, seleciona o timestamp do último snapshot confirmado pela maioria como atClusterTime e o retorna ao cliente.

Fora das transações, as leituras de"snapshot" têm a garantia de serem feitas a partir de dados confirmados pela maioria.

  • Os valores permitidos para atClusterTime dependem do parâmetro minSnapshotHistoryWindowInSeconds. minSnapshotHistoryWindowInSeconds é a janela de tempo mínima em segundos para a qual o mecanismo de armazenamento mantém o histórico de snapshots. Se você especificar um valor atClusterTime mais antigo que o snapshot mais antigo retido de acordo com minSnapshotHistoryWindowInSeconds, mongod retornará um erro.

  • Se você executar uma operação de leitura com "snapshot" em um nó do conjunto de réplicas atrasado, os dados retornados com confirmação da maioria poderão estar obsoletos.

  • Não é possível especificar atClusterTime de "snapshot" dentro de sessões casualmente consistentes.

A partir da versão 5.0, não é possível usar a preocupação de leitura "snapshot" ao ler de uma coleção limitada.

Voltar

"linearizable"