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

Preocupação de leitura "snapshot"

Nesta página

  • operações
  • Read Concern e Transações
  • Read Concern e atClusterTime
  • Leia sobre as coleções com capas

Novidades na versão 4.0.

Alterado na versão 5.0.

Uma query com read concern "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 write concern "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 transações de vários documentos suportam a leitura "snapshot" preocupação, 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" oferecem suporte ao 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" read concern 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, "snapshot" leituras têm a garantia de ler a partir de dados comprometidos pela maioria.

  • Os valores permitidos para atClusterTime dependem do parâmetro minSnapshotHistoryWindowInSeconds . minSnapshotHistoryWindowInSeconds é a janela de tempo mínimo em segundos para a qual o mecanismo de armazenamento mantém o histórico de snapshots. Se você especificar um valor de atClusterTime mais antigo do 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 membro do conjunto de réplicas atrasado, os dados retornados com comprometimento da maioria poderão estar obsoletos.

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

A partir da versão 5.0, você não poderá usar a preocupação de leitura "snapshot" ao ler de uma coleção limitada .

← Preocupação de leitura "linearizable"