View a markdown version of this page

Gravações que podem ser repetidas no Amazon DocumentDB - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gravações que podem ser repetidas no Amazon DocumentDB

A partir da versão 8.0.2 do mecanismo, o Amazon DocumentDB oferece suporte a gravações que podem ser repetidas. Quando uma operação de gravação falha devido a um erro transitório de rede ou a uma eleição primária, o driver pode repetir automaticamente a operação exatamente uma vez. O Amazon DocumentDB desduplica a gravação repetida para que a operação seja aplicada no máximo uma vez, preservando a idempotência.

As gravações que podem ser repetidas exigem um MongoDB-compatible driver que ofereça suporte ao protocolo de gravações que podem ser repetidas. A maioria dos MongoDB-compatible drivers atuais permite gravações repetidas por padrão (retryWrites=truena cadeia de conexão). Se você estiver atualizando para o mecanismo 8.0.2 de uma versão anterior, poderá remover retryWrites=false da cadeia de conexão para ativar esse recurso.

Requisitos

Para usar gravações que podem ser repetidas, você deve atender aos seguintes requisitos:

  • Mecanismo Amazon DocumentDB versão 8.0.2 ou posterior.

  • Um MongoDB-compatible driver que suporta gravações que podem ser repetidas. Para a versão mínima, consulte a documentação do seu driver.

  • A cadeia de conexão deve incluirretryWrites=true, ou o driver deve usar como padrão gravações que podem ser repetidas (a maioria dos drivers atuais faz isso).

Operações compatíveis

As gravações que podem ser repetidas se aplicam às operações de gravação nas quais cada gravação individual afeta no máximo um documento. As operações em lote são qualificadas, pois cada gravação dentro do lote é desduplicada separadamente.

As seguintes operações de gravação podem ser repetidas:

  • insertOne

  • insertMany

  • updateOne

  • deleteOne

  • findOneAndUpdate

  • findOneAndDelete

  • findOneAndReplace

  • bulkWrite(quando composto por insertOneupdateOne,deleteOne, ou replaceOne operações)

Para insertMany ebulkWrite, cada documento no lote é desduplicado individualmente. Se uma nova tentativa for necessária, somente os documentos que ainda não foram aplicados serão inseridos.

nota

commitTransactione também abortTransaction podem ser repetidos, como comandos de controle de transações e não como gravações. As gravações individuais dentro de uma transação não podem ser repetidas. Para obter mais informações, consulte Limitações.

Limitações

As seguintes limitações se aplicam às gravações que podem ser repetidas no Amazon DocumentDB:

  • updateManye não deleteMany podem ser repetidas.

  • As gravações em transações com várias declarações não podem ser repetidas. As operações de confirmação e cancelamento da transação podem ser repetidas separadamente.

  • Os documentos devem incluir um _id campo para inserções que podem ser repetidas.

  • As gravações que podem ser repetidas estão disponíveis somente na versão 8.0.2 e posterior do mecanismo. Nas versões anteriores do mecanismo, retryWrites=false defina sua string de conexão para evitar erros.

  • As operações de gravação não podem ser repetidas em clusters que usam o planejador de consultas versão 1.0.

  • Para findOneAndReplace operações de findOneAndUpdatefindOneAndDelete, e que retornam documentos grandes, as gravações que podem ser repetidas podem aumentar a latência de gravação, pois todo o documento resultante é armazenado em cache para desduplicação. Se o desempenho de gravação for essencial e os documentos devolvidos forem grandes, considere a configuração retryWrites=false para essas cargas de trabalho.

Habilitando gravações que podem ser repetidas

Para habilitar gravações que podem ser repetidas, inclua retryWrites=true em sua string de conexão:

mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=true

Se o padrão do seu driver forretryWrites=true, você poderá remover qualquer conteúdo explícito retryWrites=false da sua cadeia de conexão.

Para ver o passo a passo completo da cadeia de conexão, consulte. Conectar-se de forma programática ao Amazon DocumentDB

Como funcionam as gravações que podem ser repetidas

Quando seu aplicativo envia uma gravação comretryWrites=true, o driver anexa um ID de sessão lógico (lsid) e um número de transação (txnNumber) ao comando de gravação. O Amazon DocumentDB usa esses identificadores para desduplicar gravações:

  • Na primeira tentativa, o Amazon DocumentDB executa a gravação e armazena o resultado em cache.

  • Se o driver tentar novamente a mesma gravação (a mesma lsid etxnNumber), o Amazon DocumentDB retornará o resultado armazenado em cache sem executar novamente a gravação.

  • O Amazon DocumentDB honra novas tentativas por 60 minutos após a gravação original. Os motoristas tentam novamente imediatamente, então essa janela é muito maior do que o necessário para o motorista.

Se uma nova tentativa chegar mais de 60 minutos após a gravação original, o Amazon DocumentDB não terá mais um resultado armazenado em cache e executará a gravação como uma nova operação.

Tratamento de erros

Os seguintes erros são específicos para gravações que podem ser repetidas no Amazon DocumentDB:

Código de erro Name (Nome) Description
225 TransactionTooOld Um novo número de transação para a mesma sessão e declaração já foi confirmado, então essa nova tentativa é muito antiga para ser aplicada.
301 Gravações que podem ser repetidas não são suportadas A gravação incluiu campos de gravação que podem ser repetidos, mas a versão do mecanismo não suporta gravações que podem ser repetidas ou a operação não pode ser repetida. retryWrites=falseDefinido ao conectar a versões do motor anteriores à 8.0.2.

Migrando de RetryWrites=false

Se você estiver atualizando para a versão 8.0.2 do mecanismo e atualmente usa retryWrites=false em suas cadeias de conexão:

  1. Atualize seu cluster para a versão 8.0.2 ou posterior do mecanismo.

  2. Remova as retryWrites=false cadeias de conexão do seu aplicativo ou altere-as pararetryWrites=true.

  3. Nenhuma alteração no código do aplicativo é necessária. O motorista processa as novas tentativas automaticamente.