View a markdown version of this page

Retryable scrive in Amazon DocumentDB - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Retryable scrive in Amazon DocumentDB

A partire dalla versione 8.0.2 del motore, Amazon DocumentDB supporta le scritture rieseguibili. Quando un'operazione di scrittura fallisce a causa di un errore transitorio di rete o di una scelta primaria, il driver può riprovare automaticamente l'operazione esattamente una volta. Amazon DocumentDB deduplica il tentativo di scrittura in modo che l'operazione venga applicata al massimo una volta, preservando l'idempotenza.

Le scritture retryable richiedono un driver che supporti il protocollo Retryable Writes. MongoDB-compatible La maggior parte dei MongoDB-compatible driver attuali abilita le scritture riutilizzabili per impostazione predefinita (retryWrites=truenella stringa di connessione). Se state effettuando l'aggiornamento al motore 8.0.2 da una versione precedente, potete rimuoverlo retryWrites=false dalla stringa di connessione per abilitare questa funzionalità.

Requisiti

Per utilizzare le scritture riutilizzabili, è necessario soddisfare i seguenti requisiti:

  • Motore Amazon DocumentDB versione 8.0.2 o successiva.

  • Un MongoDB-compatible driver che supporta scritture riutilizzabili. Per la versione minima, consulta la documentazione del driver in uso.

  • La stringa di connessione deve includereretryWrites=true, oppure il driver deve utilizzare per impostazione predefinita le scritture ripetibili (la maggior parte dei driver attuali lo fa).

Operazioni supportate

Le scritture riutilizzabili si applicano alle operazioni di scrittura in cui ogni singola scrittura influisce al massimo su un documento. Le operazioni batch sono idonee perché ogni scrittura all'interno del batch viene deduplicata separatamente.

Le seguenti operazioni di scrittura possono essere ripetute:

  • insertOne

  • insertMany

  • updateOne

  • deleteOne

  • findOneAndUpdate

  • findOneAndDelete

  • findOneAndReplace

  • bulkWrite(se composto dainsertOne, updateOnedeleteOne, o replaceOne operazioni)

Per insertMany ebulkWrite, ogni documento del batch viene deduplicato singolarmente. Se è necessario un nuovo tentativo, vengono inseriti solo i documenti non ancora applicati.

Nota

commitTransactione abortTransaction sono inoltre riutilizzabili, come comandi di controllo delle transazioni anziché come scritture. Le singole scritture all'interno di una transazione non sono riutilizzabili. Per ulteriori informazioni, consulta Limitazioni.

Limitazioni

Le seguenti limitazioni si applicano alle scritture rieseguibili in Amazon DocumentDB:

  • updateManye non sono deleteMany riutilizzabili.

  • Le scritture all'interno di transazioni con più dichiarazioni non sono ripetibili. Le operazioni di conferma e interruzione delle transazioni possono essere ripetute separatamente.

  • I documenti devono includere un _id campo per gli inserti riutilizzabili.

  • Le scritture riutilizzabili sono disponibili solo nella versione del motore 8.0.2 e successive. Nelle versioni precedenti del motore, impostate la stringa retryWrites=false di connessione per evitare errori.

  • Le operazioni di scrittura non possono essere riprovate sui cluster che utilizzano la versione 1.0 di Query Planner.

  • Per e per findOneAndUpdate findOneAndReplace le operazioni che restituiscono documenti di grandi dimensioni, le scritture riutilizzabili possono aumentare la latenza di scrittura perché l'intero documento dei risultati viene memorizzato nella cache per la deduplicazione. findOneAndDelete Se le prestazioni di scrittura sono fondamentali e i documenti restituiti sono di grandi dimensioni, valuta la possibilità di impostare tali carichi di lavoro. retryWrites=false

Attivazione delle scritture riutilizzabili

Per abilitare le scritture riutilizzabili, includi retryWrites=true nella stringa di connessione:

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

Se il driver è impostato per impostazione predefinitaretryWrites=true, puoi rimuovere qualsiasi elemento esplicito retryWrites=false dalla stringa di connessione.

Per la procedura dettagliata completa sulla stringa di connessione, consulta. Connessione programmatica ad Amazon DocumentDB

Come funzionano le scritture riutilizzabili

Quando l'applicazione invia una scrittura conretryWrites=true, il driver allega un ID di sessione logico (lsid) e un numero di transazione (txnNumber) al comando di scrittura. Amazon DocumentDB utilizza questi identificatori per deduplicare le scritture:

  • Al primo tentativo, Amazon DocumentDB esegue la scrittura e memorizza nella cache il risultato.

  • Se il driver riprova la stessa scrittura (stessa lsid etxnNumber), Amazon DocumentDB restituisce il risultato memorizzato nella cache senza rieseguire la scrittura.

  • Amazon DocumentDB rispetta i tentativi per 60 minuti dopo la scrittura originale. I driver riprovano immediatamente, quindi questa finestra è molto più lunga del necessario per un conducente.

Se un nuovo tentativo arriva più di 60 minuti dopo la scrittura originale, Amazon DocumentDB non ha più un risultato memorizzato nella cache ed esegue la scrittura come nuova operazione.

Gestione degli errori

I seguenti errori sono specifici delle scritture rieseguibili in Amazon DocumentDB:

Codice di errore Nome Description
225 TransactionTooOld È già stato eseguito il commit di un numero di transazione più recente per la stessa sessione e la stessa dichiarazione, quindi questo nuovo tentativo è troppo vecchio per essere applicato.
301 Le scritture riutilizzabili non sono supportate La scrittura includeva campi di scrittura riutilizzabili, ma la versione del motore non supporta le scritture rieseguibili o l'operazione non è rieseguibile. Impostato retryWrites=false quando ci si connette a versioni del motore precedenti alla 8.0.2.

Migrazione da RetryWrites=false

Se stai eseguendo l'aggiornamento alla versione 8.0.2 del motore e attualmente utilizzi nelle stringhe di connessione: retryWrites=false

  1. Aggiorna il cluster alla versione del motore 8.0.2 o successiva.

  2. retryWrites=falseRimuovi le stringhe di connessione dell'applicazione o modificale in. retryWrites=true

  3. Non sono necessarie modifiche al codice dell'applicazione. Il conducente gestisce i tentativi automaticamente.