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.
Compatibilidade
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
featureCompatibilityVersion3.6+ em todos os nós.setFeatureCompatibilityVersionConsulte. - Escrever confirmação
- As gravações com write concern
0não podem ser repetidas.
Comportamentos
Retryable Writes e transações multidocumentos
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.
Habilitando Retryable Writes
- 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çãoretryWrites=truepode 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 incluirretryWrites=falsena cadeia de conexão. mongoshmongoshhabilita gravações repetíveis por padrão. Para desabilitar,--retryWrites=falseutilize:mongosh --retryWrites=false
Operações de Retryable Write
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 | |
| |
| 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 |
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 |
Erros de rede persistentes
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.
Período de failover
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.
Diagnóstico
serverStatus inclui estatísticas de gravações repetíveis na transactions seção.
Retryable local writes com relação ao banco de dados
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.
Error Handling
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ótulo |
Trabalho parcial feito. (Pelo menos um documento é inserido, mas não todos.) | Erro retornado sem rótulo |
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.