¿DynamoDB admite transacciones?
Sí. DynamoDB admite transacciones ACID mediante TransactWriteItems y TransactGetItems. Cada transacción agrupa hasta 100 acciones sobre una o varias tablas de la misma cuenta y región en una única operación de todo o nada, con un límite de tamaño combinado de 4 MB. Si falla cualquier acción, no se aplica ninguna.
Las dos API de transacción
TransactWriteItems— agrupa accionesPut,Update,DeleteyConditionCheckde forma atómica. Síncrona e idempotente.TransactGetItems— lee varios elementos en una única instantánea atómica y consistente.
Reglas y límites
- Hasta 100 elementos por transacción, sobre una o varias tablas.
- Todas las tablas deben estar en la misma cuenta y región.
- El tamaño combinado de los elementos no puede superar los 4 MB.
- No puedes apuntar dos veces al mismo elemento en una transacción.
- En tablas globales, las garantías ACID se aplican solo dentro de la región donde se ejecutó la transacción — los cambios se replican a otras regiones tras la confirmación, y las tablas globales en modo de consistencia fuerte multirregión (MRSC) no admiten las API de transacción en absoluto.
Lo que cuesta la atomicidad
El mismo elemento, dos caminos, con ReturnConsumedCapacity activado:
PutItem, one 920-byte item ConsumedCapacity 1
TransactWriteItems, the same single Put ConsumedCapacity 2Una escritura transaccional vale por dos escrituras de capacidad, y una lectura transaccional por dos lecturas. De forma sostenida, esa duplicación es todo el compromiso: 100 escrituras por segundo de elementos de 1 KB cuestan 164,25 $ al mes en us-east-1 bajo demanda, o 328,50 $ si todas ellas pasan por una transacción. La calculadora de precios tiene un ajuste de consistencia transaccional exactamente para esta comparación.
El reintento que no se aplica dos veces
Una transacción que expira puede haberse confirmado igualmente, así que lo peligroso es el reintento, no la transacción. ClientRequestToken es lo que hace seguro el reintento. Enviando la misma transacción ADD counter :one dos veces con un solo token:
TransactWriteItems (token order-4711) 200
TransactWriteItems (token order-4711) 200
GetItem counter {"N": "1"}Las dos llamadas tuvieron éxito y el contador se movió una vez. El token sigue siendo válido durante 10 minutos después de que termine la primera petición; reutilízalo más tarde y la segunda llamada es una transacción nueva, así que el contador vuelve a moverse. Reutilízalo dentro de la ventana con cualquier otro parámetro cambiado y DynamoDB devuelve IdempotentParameterMismatch.
Transacción frente a lote
A diferencia de BatchWriteItem, que aplica cada elemento por su cuenta (unas escrituras pueden llegar mientras otras fallan), una transacción es de todo o nada — úsala cuando una aplicación parcial corrompería tus datos.
Profundiza
Aprende patrones en transacciones en DynamoDB, y construye las expresiones de condición en las que se apoyan con el Expression Builder. Descarga DynoTable para preparar tus ediciones de elementos como diffs revisables y confirmarlas juntas como un lote transaccional.
Referencias
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba; el límite de 100 acciones y la ventana de idempotencia de 10 minutos se revisaron el 2026-07-28.
Los valores de ConsumedCapacity y la reejecución idempotente se reprodujeron el 2026-07-28 contra DynamoDB Local 3.3.0 mediante @aws-sdk/client-dynamodb 3.1095.0; los costes mensuales se calcularon a partir del precio bajo demanda por unidad de petición de escritura en us-east-1 de nuestra tabla de precios de AWS sincronizada.