Troppe azioni in una chiamata TransactWriteItems
TL;DR — Una transazione DynamoDB ha un limite di 100 azioni. TransactWriteItems (e TransactGetItems) rifiuta una richiesta con più di 100 azioni Put/Update/Delete/ConditionCheck. Suddividi il lavoro in più transazioni oppure, se non hai bisogno dell'atomicità tutto o niente, utilizza invece BatchWriteItem (25 per chiamata).
Cosa significa
ValidationException: 1 validation error detected: Value '<your request>' at 'transactItems' failed to satisfy constraint: Member must have length less than or equal to 100Il servizio riproduce l'intera richiesta serializzata in cui si trova "
"TransactWriteItems" raggruppa le azioni che vengono tutte sottoposte a commit o rollback insieme, ma una singola transazione può contenere al massimo 100 azioni e la dimensione aggregata degli elementi nella transazione non può superare 4 MB. Passane altri e DynamoDB rifiuta l'intera chiamata prima di eseguirla. Il messaggio spesso viene letto come un vincolo sulla lunghezza dell'elenco "TransactItems". Si tratta di una "ValidationException" HTTP 400, lato client, e non è possibile riprovarla fino a quando la transazione non diventa più piccola.
Perché succede
- Batch di troppe scritture in modo atomico: tentativo di eseguire il commit di 150 put in una transazione.
- Un ciclo che aggiunge azioni illimitate a un singolo elenco "TransactItems".
- Fan-out superiore a 100: un'operazione logica che tocca più di 100 elementi ed è stata modellata come una singola transazione.
- Conteggio solo delle scritture: ricorda che anche le azioni
ConditionCheckcontano ai fini del conteggio di 100.
Come risolverlo
- Diviso in più transazioni di ≤100 azioni ciascuna: ogni transazione è atomica in modo indipendente (non si ripristinano insieme).
- Riconsidera se hai bisogno di una transazione: se le scritture non richiedono una semantica tutto o niente,
BatchWriteItem(≤25 per chiamata) è più economico e più efficiente in termini di throughput. - Riduci il conteggio delle azioni: raggruppa più mutazioni in un elemento in un singolo "Aggiornamento" con una "UpdateExpression" combinata.
- Modella l'aggregato in modo diverso in modo che una singola modifica logica tocchi meno elementi.
- Attenzione al limite massimo di 4 MB per la dimensione aggregata degli elementi insieme al limite di 100 azioni: gli elementi di grandi dimensioni possono fallire anche al di sotto delle 100 azioni.
Riproducilo
Una transazione con 101 azioni, una oltre il limite. Il rifiuto è una semplice ValidationException sulla lunghezza dell'array, non un errore specifico della transazione:
const actions = Array.from({length: 101}, (_, i) => ({
Put: {TableName: 'orders', Item: {pk: {S: `T#${i}`}, sk: {S: 'META'}}}
}));
await client.send(new TransactWriteItemsCommand({TransactItems: actions}));Produzione reale:
ValidationException: Member must have length less than or equal to 100
HTTP 400Nota la dicitura: DynamoDB lo rifiuta come vincolo di lunghezza sull'array TransactItems, quindi la stringa che ottieni non contiene alcuna menzione delle transazioni. La sola ricerca del messaggio non ti porterà ovviamente qui.
Workbench DynoTable
Prima di eseguire più di 100 scritture atomiche, ispeziona gli elementi di destinazione in DynoTable: apri la tabella con ⌘K e conferma che ciascuna chiave esiste. La gestione temporanea (⌘S) ti consente di testare prima una transazione più piccola.
Crea aggiornamenti con più elementi nel Generatore di espressioni e riunisci le azioni duplicate su una chiave in un singolo "Aggiornamento". Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.
Fonti
- TransactWriteItems - Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Transazioni Amazon DynamoDB: come funziona (verificato il 13-07-2026)
Errori correlati
- La richiesta di transazione non può includere più operazioni su un elemento — lo stesso elemento preso di mira due volte in una transazione.
- TransactionCanceledException: una transazione valida annullata al commit.
- Troppi elementi richiesti per la chiamata BatchWriteItem: il limite batch non transazionale (25).
- Esempio di codice: TransactWriteItems in Node.js: una transazione di dimensioni corrette da cui iniziare.
- Impara: DynamoDB transazioni · Operazioni batch
Riferimenti
- Riferimento TransactWriteItems - Amazon DynamoDB API
- TransactGetItems - Riferimento Amazon DynamoDB API
- Transazioni Amazon DynamoDB: come funziona - Guida per sviluppatori Amazon DynamoDB
- BatchWriteItem — Riferimento Amazon DynamoDB API
- Quote di servizi, account e tabelle in Amazon DynamoDB — Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.
Riprodotto il 26-07-2026 rispetto a DynamoDB Local 2.x con AWS SDK per JavaScript v3.1095.0: l'output sopra è letterale.