Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Gravações repetíveis

Nesta página

  • Pré-requisitos
  • Retryable Writes e transações multidocumentos
  • Habilitando Retryable Writes
  • Operações de Retryable Write
  • Comportamento

As retryable writes permitem que os drivers do MongoDB repitam automaticamente determinadas operações de escrita uma única vez se encontrarem erros de rede ou se não conseguirem encontrar um primary íntegro no conjunto de réplicas ou no cluster fragmentado.

As retryable writes têm os seguintes requisitos:

Topologias de implementação suportadas
As gravações repetíveis exigem um conjunto de réplicas ou um cluster fragmentado e não oferecem suporte a instâncias autônomas.
Mecanismo de armazenamento suportado
As gravações que podem ser repetidas exigem um mecanismo de armazenamento que ofereça suporte ao bloqueio em nível de documento, como o WiredTiger ou mecanismos de armazenamento na memória.
Mais de 3,6 drivers MongoDB

Os clientes exigem drivers do MongoDB atualizados para o MongoDB 3.6 ou posterior:

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
A versão MongoDB de cada nó no cluster deve ser 3.6 ou superior e os featureCompatibilityVersion de cada nó no cluster deve ser 3.6 ou superior. Consulte setFeatureCompatibilityVersion para obter mais informações sobre a bandeira featureCompatibilityVersion .
Escrever confirmação
As operações de gravação emitidas com uma Preocupação de Gravação de 0 não podem ser repetidas.

As operações de confirmação e cancelamento da transação são operações de retryable write. Se a operação de confirmação ou a operação de cancelamento encontrar um erro, os drivers do MongoDB tentarão novamente a operação uma única vez, mesmo se a retryWrites estiver definida como false.

As operações de escrita dentro da 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

As gravações repetíveis são habilitadas por padrão no mongosh. Para desativar gravações repetíveis, use a opção de linha de comando --retryWrites=false:

mongosh --retryWrites=false
mongo

As Retryable Writes são desabilitadas por padrão no shell mongo legado. Para ativar retryable writes, use a opção de linha de comando --retryWrites=true :

mongo --retryWrites=true

As seguintes operações de escrita são repetíveis quando emitidas com write concern reconhecida; por exemplo, Write Concern não pode ser {w: 0}.

Observação

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

Métodos
Descrição
Inserir operações
Operações de atualização de documento único
Operações de exclusão de documento único
findAndModify operações. Todas as findAndModify operações são operações de 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.

Observação

Atualizações nos valores da chave de shard

A partir do MongoDB 4.2, você pode atualizar o valor das chaves de shard de um documento (a menos que o campo chave de shard seja o campo _id invariável) emitindo operações de atualização/localização e modificação de um único documento como uma retryable write ou em uma transação. Para obter detalhes, consulte Alterar o valor da chave de shard de um documento.

As retryable writes do MongoDB fazem apenas uma tentativa de repetição. Isso ajuda a resolver erros de rede transitórios e eleições de conjuntos de réplicas, mas não erros de rede persistentes.

Se o driver não conseguir encontrar um primary íntegro no conjunto de réplicas de destino ou no shard do cluster fragmentado, os drivers aguardarão serverSelectionTimeoutMS milissegundos para determinar o novo primary antes de tentar novamente. As retryable writes não abordam instâncias em que o período de failover excede serverSelectionTimeoutMS.

Aviso

Se o aplicativo cliente parar temporariamente de responder por mais de localLogicalSessionTimeoutMinutes depois de emitir uma operação de escrita, há uma chance de que, quando os aplicativos cliente começarem a responder (sem uma reinicialização), a operação de escrita possa ser tentada novamente e aplicada novamente.

Novidades na versão 3.6.3.

O comando serverStatus e seu assistente de shell mongosh db.serverStatus() incluem estatísticas sobre gravações repetíveis na seção transactions.

Os drivers oficiais do MongoDB permitem gravações repetíveis por padrão. Os aplicativos que gravam no banco de dados local encontrarão erros de gravação, a menos que as gravações repetíveis sejam explicitamente desabilitadas.

Para desativar as gravações que podem ser repetidas, especifique retryWrites=false na connection string do Cluster MongoDB.

Voltar

Gravação em massa

Próximo

Leituras repetíveis