DynamoDBEccezioneConflittoTransazione
TL;DR — Un'altra transazione è già operativa sullo stesso articolo della tua richiesta, quindi DynamoDB ha rifiutato la tua per preservare l'isolamento. Si tratta di un conflitto temporaneo, non di un bug nei dati: riprova con un backoff esponenziale, mantieni le transazioni di piccole dimensioni e riduci le scritture simultanee sullo stesso elemento importante.
Cosa significa
TransactionConflictException: Transaction is ongoing for the itemDynamoDB serializza scritture contrastanti rispetto alle transazioni in volo. Si verifica questa eccezione quando un semplice PutItem, UpdateItem o DeleteItem entra in collisione con un TransactWriteItems in volo che include lo stesso elemento. Invece di bloccare, DynamoDB rifiuta la scrittura di un singolo elemento con TransactionConflittiException (HTTP 400). È riprovabile: il conflitto viene risolto una volta che l'altra transazione viene confermata o interrotta.
Nota la distinzione da TransactionCanceledException: quando la richiesta persa è essa stessa un TransactWriteItems o TransactGetItems, DynamoDB annulla invece l'intera transazione: ottieni una cancellation i cui CancellationReasons riportano TransactionConflect come codice motivo per articolo, non questa eccezione.
Perché succede
- Scritture simultanee sullo stesso elemento: un semplice
PutItem/UpdateItemsi sovrappone a unTransactWriteItemsin volo che tocca quell'elemento. - Due transazioni che condividono un elemento: due richieste
TransactWriteItemsincludono la stessa chiave contemporaneamente; uno vince, l'altro viene annullato con un codice motivo "TransactionConflitto" (emerso come "TransactionCanceledException"). - Un elemento importante sottoposto a numerosi aggiornamenti simultanei — ad es. un contatore condiviso o una singola riga aggregata ogni richiesta viene aggiornata.
- Transazioni lunghe o grandi che contengono elementi abbastanza a lungo da sovrapporsi ad altri scrittori.
- Una tempesta di tentativi: i tentativi senza backoff accumulano più tentativi simultanei sullo stesso oggetto conteso.
Come risolverlo
- Riprova con backoff esponenziale + jitter. Questa è la soluzione principale: il conflitto è temporaneo e si risolve quando l'altra transazione viene risolta. Mantieni il jitter in modo che i nuovi tentativi non si risincronizzino in un'altra collisione.
- Mantieni le transazioni piccole e brevi: meno elementi per "TransactWriteItems" significa sospensioni più brevi e meno sovrapposizioni.
- Riduci la contesa sugli elementi importanti: suddividi un contatore attivo su più elementi e aggregalo oppure utilizza un contatore atomico con un semplice
UpdateItem(ADD) invece di una transazione quando non hai bisogno della semantica tutto o niente. - Non mischiare una transazione e una scrittura semplice sullo stesso oggetto contemporaneamente se puoi evitarlo: indirizzale entrambe attraverso lo stesso percorso.
- Monitora il parametro CloudWatch
TransactionConflictper vedere se il conflitto sta aumentando e dove.
Ispeziona in DynoTable
Quando lo scrittore simultaneo sei tu, le modifiche manuali in batch tramite la gestione temporanea (⌘S) - DynoTable le impegna come una scrittura rivista invece di un flusso di aggiornamenti di singoli elementi sovrapposti. Apri gli elementi contesi con ⌘K e controlla lo stato attivo prima di riprovare.
Dimensiona il traffico transazionale con il calcolatore dei prezzi. Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili. Consulta Connetti a AWS e Installa.
Fonti
- Transazioni Amazon DynamoDB: come funziona (verificato il 13-07-2026)
- PutItem - Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
FAQ
Come posso correggere TransactionConflittiException in DynamoDB? Riprovare la richiesta con backoff e jitter esponenziali: il conflitto è transitorio con un'altra transazione in corso sullo stesso articolo. Inoltre, mantieni le transazioni piccole, partiziona gli elementi più importanti ed evita di eseguire contemporaneamente una transazione e una semplice scrittura sullo stesso elemento.
TransactionConflictException è uguale a TransactionCanceledException? No. TransactionConflictException significa che un'altra transazione è attualmente in corso sull'articolo. TransactionCanceledException significa che è stato eseguito il rollback di un'intera transazione; i relativi motivi di cancellazione spiegano il motivo e un conflitto di transazione può essere uno di questi motivi.
Errori correlati
- TransactionCanceledException: è stato eseguito il rollback di un'intera transazione (condizioni, capacità o conflitto).
- ConditionalCheckFailedException: una singola condizione di scrittura non è riuscita.
- Esempio di codice: TransactWriteItems in Node.js — una transazione con nuovo tentativo/backoff per adattarsi.
- Impara: DynamoDB transazioni · Contatori atomici
Riferimenti
Transazioni Amazon DynamoDB: come funziona - Guida per sviluppatori Amazon DynamoDB
DynamoDB Metriche e dimensioni - Guida per sviluppatori Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.