

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 name="retryable-writes"></a>

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=true`nella 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
<a name="retryable-writes-requirements"></a>

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 includere`retryWrites=true`, oppure il driver deve utilizzare per impostazione predefinita le scritture ripetibili (la maggior parte dei driver attuali lo fa).

## Operazioni supportate
<a name="retryable-writes-supported-operations"></a>

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 da`insertOne`, `updateOne``deleteOne`, o `replaceOne` operazioni)

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

**Nota**  
`commitTransaction`e `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](#retryable-writes-limitations).

## Limitazioni
<a name="retryable-writes-limitations"></a>

Le seguenti limitazioni si applicano alle scritture rieseguibili in Amazon DocumentDB:
+ `updateMany`e 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
<a name="retryable-writes-enabling"></a>

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 predefinita`retryWrites=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](connect_programmatically.md)

## Come funzionano le scritture riutilizzabili
<a name="retryable-writes-how-it-works"></a>

Quando l'applicazione invia una scrittura con`retryWrites=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` e`txnNumber`), 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
<a name="retryable-writes-errors"></a>

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
<a name="retryable-writes-migration"></a>

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.

1. `retryWrites=false`Rimuovi le stringhe di connessione dell'applicazione o modificale in. `retryWrites=true`

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