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ções Put, Update, Delete e ConditionCheck.
  • 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 100

Repare 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 item

Essa é 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

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.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.