Preocupação de leitura "snapshot"
Nesta página
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"
.
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çõ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.
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"
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.
atClusterTime
Considerações e comportamento
Os valores permitidos para
atClusterTime
dependem do parâmetrominSnapshotHistoryWindowInSeconds
.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 comminSnapshotHistoryWindowInSeconds
,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.
Leia sobre as coleções com capas
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 .