Menu Docs
Página inicial do Docs
/ /

Gravações repetíveis

As retryable writes 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 primary íntegro no conjunto de réplicas ou no cluster fragmentado.

As retryable writes 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.setFeatureCompatibilityVersion Consulte.
Escrever confirmação
As gravações com write concern 0 não podem ser repetidas.

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

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

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,--retryWrites=false utilize:

mongosh --retryWrites=false

O MongoDB tenta novamente as seguintes operações se tiver reconhecido opreocupação de gravação (por exemplo, o write concern 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 para encontrar um novo primário antes de tentar novamente. As retryable writes falharão se o failover demorar mais do que esse tempo serverSelectionTimeoutMS limite.

Aviso

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

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

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 na retryWrites=false stringde 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