Menu Docs
Página inicial do Docs
/ /

Gravações repetíveis

As gravações repetíveis permitem que os drivers repitam operações de escrita específicas uma vez após erros de rede ou se não conseguirem encontrar um primário íntegro no conjunto de réplicas ou no cluster.

As gravações repetíveis exigem:

Topologias de implantação
Um conjunto de réplicas ou cluster fragmentado. Não suportado em instâncias autônomo.
Mecanismo de armazenamento
Um mecanismo de armazenamento com bloqueio em nível de documento, como WiredTiger ou na memória.
MongoDB Drivers

Drivers compatíveis com o MongoDB 3.6+.

Java 3.6+

Python 3,6+

C 1.9+

Go 1.8+

C# 2.5+

Nó 3.0+

Ruby 2,5+

Rust 2.1+

Swift 1.2+

Perl 2.0+

PHPC 1.4+

Scala 2,2+

C++ 3.6.6+

Versão do MongoDB
MongoDB 3.6+ e featureCompatibilityVersion 3.6+ em todos os nós. Consulte setFeatureCompatibilityVersion.
Escrever confirmação
As gravações com preocupação de gravação 0 não podem ser repetidas.

As operações de confirmação e cancelamento da transação podem ser repetidas. Os drivers tentam novamente essas operações uma vez em caso de erro, mesmo que retryWrites seja false.

As gravações dentro de uma transação não podem ser repetidas individualmente, independentemente do valor de retryWrites.

Para obter mais informações sobre transações, consulte Transações.

MongoDB Drivers
Drivers compatíveis com o MongoDB 4.2 e superiores habilitam Retryable Writes por padrão. Drivers anteriores exigem a opção retryWrites=true . A opção retryWrites=true pode ser omitida em aplicativos que utilizam drivers compatíveis com o MongoDB 4.2 e superior.

Para desabilitar gravações repetitivas, os aplicativos que usam drivers compatíveis com o MongoDB 4.2 e superiores devem incluir retryWrites=false na cadeia de conexão.
mongosh

mongosh habilita gravações repetíveis por padrão. Para desabilitar, utilize --retryWrites=false:

mongosh --retryWrites=false

O MongoDB tenta novamente as seguintes operações se tiver reconhecido o preocupação de gravação (por exemplo, opreocupação de gravação não pode {w: 0} ser):

Observação

As gravações dentro de transações não podem ser repetidas individualmente.

Métodos
Descrição

Inserções

Atualizações de documento único

Exclusões de documento único

findAndModify operações ( sempre documento único ).

db.collection.bulkWrite() com as seguintes operações de gravação:

Operações de escrita em massa que consistem apenas nas operações de escrita de documento único. Uma operação em massa repetível pode incluir qualquer combinação das operações de escrita especificadas, mas não pode incluir nenhuma operação de escrita de vários documentos, como updateMany.

Operações de escrita em massa que consistem apenas nas operações de escrita de documento único. Uma operação em massa repetível pode incluir qualquer combinação das operações de escrita especificadas, mas não pode incluir nenhuma operação de escrita de vários documentos, como update, que especifica true para a opção multi.

O MongoDB tenta novamente gravações uma vez. Isso corrige erros de rede transitórios e eleições de conjuntos de réplicas, mas não erros de rede persistentes.

Os drivers aguardam serverSelectionTimeoutMS para encontrar um novo primário antes de tentar novamente. As gravações repetíveis falharão se o failover demorar mais do que esse tempo limite.

Aviso

Se um cliente não responder por mais de localLogicalSessionTimeoutMinutes, a gravação poderá tentar novamente e aplicar novamente quando o cliente se recuperar.

serverStatus inclui estatísticas de gravações repetíveis na seção transactions.

Os drivers oficiais permitem gravações repetíveis por padrão. As gravações no local banco de dados falharão, a menos que você desative as gravações repetíveis.

Para desativar, defina retryWrites=false na string de conexão.

A partir do MongoDB 6.1, se a primeira e segunda tentativas de uma retryable write falharem sem que uma única gravação seja executada, o MongoDB retornará um erro com o rótulo NoWritesPerformed.

O rótulo NoWritesPerformed diferencia os resultados de operações em lote como insertMany(). Em uma operação insertMany, um dos seguintes desfechos pode ocorrer:

Resultado
Saída MongoDB

Nenhum documento é inserido.

Erro retornado com rótuloNoWritesPerformed.

Trabalho parcial feito. (Pelo menos um documento é inserido, mas não todos.)

Erro retornado sem rótulo NoWritesPerformed.

Todos os documentos são inseridos.

Retornou com sucesso.

A aplicação pode usar o rótulo NoWritesPerformed para determinar definitivamente que nenhum documento foi inserido. Esse relatório de erros permite que o aplicativo mantenha um estado preciso do banco de dados ao lidar com retryable writes.

Nas versões anteriores do MongoDB, um erro é retornado quando a primeira e a segunda tentativas de uma retryable write falha. No entanto, não há distinção que indique que nenhuma gravação foi realizada.

Leituras repetíveis

Voltar

Gravação em massa

Nesta página