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 incluir
retryWrites=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:
insertOneinsertManyupdateOnedeleteOnefindOneAndUpdatefindOneAndDeletefindOneAndReplacebulkWrite(quando composto porinsertOneupdateOne,deleteOne, oureplaceOneoperaçõ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ãodeleteManypodem 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
_idcampo 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=falsedefina 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
findOneAndReplaceoperações defindOneAndUpdatefindOneAndDelete, 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çãoretryWrites=falsepara 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
lsidetxnNumber), 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:
-
Atualize seu cluster para a versão 8.0.2 ou posterior do mecanismo.
-
Remova as
retryWrites=falsecadeias de conexão do seu aplicativo ou altere-as pararetryWrites=true. -
Nenhuma alteração no código do aplicativo é necessária. O motorista processa as novas tentativas automaticamente.