O DynamoDB é compatível com ACID?
Sim. O DynamoDB suporta transações ACID através das APIs TransactWriteItems e TransactGetItems. Elas agrupam até 100 ações em uma única operação de tudo ou nada com garantias de atomicidade, consistência, isolamento e durabilidade dentro de uma Região da AWS. Escritas de item único também são atômicas e duráveis, mas ACID em vários itens exige as APIs de transação.
O que ACID significa aqui
Uma transação do DynamoDB ou aplica todas as ações ou nenhuma delas (atomicidade), deixa os dados em um estado válido (consistência), fica isolada de transações concorrentes e é confirmada de forma durável assim que retorna sucesso. Essas garantias valem dentro da Região da AWS onde a API de transação foi invocada.
As APIs de transação
TransactWriteItems— uma escrita síncrona e idempotente que agrupa açõesPut,Update,DeleteeConditionCheck.TransactGetItems— uma leitura atômica e consistente de vários itens.
Você não pode mirar o mesmo item duas vezes em uma transação.
O limite é 100, não 25
A referência da API diz que o TransactWriteItems "groups up to 100 action requests" e que "the aggregate size of the items in the transaction cannot exceed 4 MB" (consultada em 2026-07-28). O número era 25 antes de 2022, e o valor obsoleto ainda é repetido o bastante para valer a pena conferir na API em vez de em um post de blog.
Uma transação de 100 ações é aceita. Uma de 101 é rejeitada:
ValidationException: Member must have length less than or equal to 100Repare no que essa mensagem não contém: a palavra "transaction". É uma reclamação genérica sobre o comprimento de um array, então ela não vai aparecer em uma busca de log por erros de transação. As APIs de lote são menos evasivas. BatchGetItem com 101 chaves retorna Too many items requested for the BatchGetItem call, e BatchWriteItem com 26 retorna a mesma frase com o seu próprio nome dentro.
Mirar um item duas vezes também falha, mesmo quando cada ação teria sucesso sozinha:
ValidationException: Transaction request cannot include multiple operations on one itemEssa é a que pega o código que monta a lista de ações a partir de um loop sobre eventos recebidos sem antes deduplicar por chave.
Transações também cobram em dobro. Gravar 100 itens de 1 KB de forma transacional consome 200 unidades de escrita, contra 100 para os mesmos itens gravados individualmente, então a atomicidade tem um preço mesmo quando nada falha.
E as tabelas globais?
Uma transação é ACID apenas na Região em que foi invocada. Em tabelas globais usando o modo padrão de consistência eventual multirregional (MREC), escritas transacionais não são replicadas como uma unidade — outra Região pode observar brevemente uma transação parcialmente replicada enquanto as mudanças se propagam. Tabelas globais configuradas para consistência forte multirregional (MRSC) não suportam as APIs de transação de jeito nenhum.
Aprofunde-se
Aprenda a modelar isso com segurança em transações do DynamoDB, e monte as expressões de condição de que elas precisam com o Expression Builder. Experimente contra as suas próprias tabelas — baixe o DynoTable.
Referências
- 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 pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima; os limites de 100 ações e 4 MB foram novamente consultados na referência da API em 2026-07-28.
As rejeições acima foram reproduzidas em 2026-07-28 no DynamoDB Local 3.3.0 (amazon/dynamodb-local:latest) via @aws-sdk/client-dynamodb 3.1095.0. Toda string citada é saída literal do motor.