Preocupação de leitura "snapshot"
Nesta página
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"
.
operações
Para obter uma lista de todas as operações que aceitam preocupações de leitura, consulte Operações que suportam preocupações de leitura.
Read Concern e Transações
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.
Read Concern e atClusterTime
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.
atClusterTime
Considerações e comportamento
Os valores permitidos para
atClusterTime
dependem do parâmetrominSnapshotHistoryWindowInSeconds
.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 comminSnapshotHistoryWindowInSeconds
,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.
Leia sobre as coleções com capas
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.