DEV Community

Cover image for ACID em Bancos de Dados: O Que É e Por Que Deveria Importar Para Você
André Moreira
André Moreira

Posted on

ACID em Bancos de Dados: O Que É e Por Que Deveria Importar Para Você

ACID em Bancos de Dados: O Que É e Por Que Deveria Importar Para Você

Quando você está construindo uma aplicação que depende de dados, uma pergunta inevitável surge: como garantir que meus dados estejam sempre corretos e seguros? A resposta está em um acrônimo que virou padrão na indústria: ACID.

Neste artigo, vamos entender o que ACID significa, por que é importante e como isso afeta sua escolha de banco de dados.

O Que é ACID?

ACID é um conjunto de quatro propriedades que garantem a confiabilidade das transações em um banco de dados. Cada letra representa um princípio fundamental:

  • A - Atomicity (Atomicidade)
  • C - Consistency (Consistência)
  • I - Isolation (Isolamento)
  • D - Durability (Durabilidade)

Vamos explorar cada uma delas com exemplos práticos que fazem sentido no dia a dia.

🔄 Atomicity (Atomicidade)

A atomicidade garante que uma transação seja "tudo ou nada". Ou ela é completamente executada, ou não é executada em absoluto.

Imagine você transferindo R$ 100 de uma conta para outra em uma aplicação bancária:

1. Debita R$ 100 da conta A
2. Credita R$ 100 na conta B
Enter fullscreen mode Exit fullscreen mode

Se algo der errado entre o passo 1 e 2 (queda de energia, erro na aplicação), o banco volta tudo ao estado anterior. Você não perde R$ 100 nem deixa de ganhar.

Sem atomicidade: Seu dinheiro desaparece, ou aparece em duas contas. Caos total.

Com atomicidade: Ou a transferência completa ou é revertida. Segurança garantida.

✅ Consistency (Consistência)

A consistência garante que o banco de dados sempre esteja em um estado válido. As regras que você definiu são sempre respeitadas.

Vamos dizer que você tem uma regra: "Todo usuário deve ter um email válido".

INSERT INTO users (name, email) VALUES ('João', 'email-inválido');
Enter fullscreen mode Exit fullscreen mode

Sem consistência: O banco aceitaria esse dado inválido.

Com consistência: O banco rejeita a operação porque viola a regra definida.

A consistência protege a integridade dos seus dados. Constraints, triggers e validações garantem que nada "errado" entre no seu banco.

🔒 Isolation (Isolamento)

O isolamento garante que transações concorrentes não interfiram umas nas outras. Se duas operações acontecem ao mesmo tempo, uma não vê o estado parcial da outra.

Imagine dois usuários comprando o último produto em estoque simultaneamente:

Sem isolamento:

  • Usuário A verifica: 1 produto em estoque ✓
  • Usuário B verifica: 1 produto em estoque ✓
  • Ambos completam a compra... agora o estoque está em -1

Com isolamento:

  • Usuário A verifica: 1 produto ✓
  • Usuário B tenta a mesma coisa, mas o banco garante que só um consegue
  • Um leva, o outro recebe "produto fora de estoque"

💾 Durability (Durabilidade)

A durabilidade garante que os dados não vão sumir. Depois que você confirma uma transação, ela está gravada em pedra (praticamente).

Mesmo se seu servidor cair na próxima nanosegundo, aquele dado está salvo.

Sem durabilidade:

  • Você faz uma venda, confirma a transação
  • Servidor explode
  • Ninguém sabe que a venda aconteceu

Com durabilidade:

  • Você faz uma venda, confirma
  • Servidor explode
  • Os dados ainda lá estão, salvos permanentemente

Quando ACID Realmente Importa?

ACID é crítico quando:

✅ Dinheiro está envolvido (transações financeiras, pagamentos)
✅ Dados sensíveis precisam estar corretos (saúde, legal)
✅ Consistência é não-negociável (inventário, reservas)
✅ Seu negócio depende da confiabilidade dos dados

Menos crítico (mas ainda importante) quando:

⚠️ Você coleta analytics ou logs (algumas perdas são aceitáveis)
⚠️ Você trabalha com conteúdo de redes sociais (consistência eventual é ok)
⚠️ Você precisa de escalabilidade maciça em tempo real

Tabela Comparativa: Qual Banco Usar?

Banco de Dados ACID Tipo Melhor Para Escalabilidade
PostgreSQL ✅ Sim (Completo) Relacional Aplicações críticas, financeiro, SaaS Vertical (com replicação)
MySQL/MariaDB ✅ Sim (Com InnoDB) Relacional Web apps, blogs, startups Vertical (com replicação)
MongoDB ✅ Sim (Desde v4) Documento Dados semi-estruturados, prototipagem Horizontal
SQLite ✅ Sim Relacional Apps simples, mobile, desktop Apenas arquivo local
Oracle Database ✅ Sim (Completo) Relacional Grandes corporações, enterprise Vertical/Horizontal
DynamoDB ⚠️ Parcial Chave-valor Aplicações serverless na AWS Horizontal
Redis ❌ Não Chave-valor Cache, sessões, real-time Horizontal (com cuidado)
Cassandra ❌ Não Coluna-largura Big data, grande escala Horizontal

Exemplo Prático com Laravel/PHP

Se você está usando Laravel com PostgreSQL, está tendo ACID de graça:

DB::transaction(function () {
    $account = Account::find(1)->lockForUpdate();
    $account->balance -= 100;
    $account->save();

    $other = Account::find(2)->lockForUpdate();
    $other->balance += 100;
    $other->save();
});
Enter fullscreen mode Exit fullscreen mode

Se algo errar dentro da transação, tudo volta. PostgreSQL garante:

  • Atomicity: Ou ambas contas são atualizadas ou nenhuma é
  • Consistency: As regras do seu modelo são respeitadas
  • Isolation: Outro user não consegue ler estado parcial
  • Durability: Depois do commit, aquilo não some

Consistência Eventual: O Trade-off

Alguns bancos NoSQL sacrificam ACID por velocidade e escalabilidade. Usam um modelo chamado "consistência eventual".

Significa: seus dados podem estar inconsistentes por alguns milissegundos, mas eventualmente ficarão consistentes.

Ideal para:

  • Contadores de views (quem liga se está 100% exato?)
  • Social media feeds
  • Análise de dados em larga escala

Não recomendo para:

  • Transações financeiras
  • Inventário de e-commerce
  • Qualquer coisa onde a precisão é vida ou morte

A Regra de Ouro

Se você está em dúvida, escolha ACID.

PostgreSQL e MySQL com InnoDB são extremamente rápidos e confiáveis. Você precisará de MUITA escala antes de realmente precisar abandonar ACID por NoSQL.

Comece simples. Escale quando necessário. Não sobre-engenharia.

Conclusão

ACID não é um conceito chato de livro de banco de dados. É a diferença entre um sistema que funciona confiável e um que perde dados aleatoriamente.

Entender ACID ajuda você a:

  • Escolher o banco de dados certo para seu projeto
  • Escrever código mais seguro
  • Evitar bugs sutis que aparecem em produção
  • Dormir melhor à noite sabendo que seus dados estão seguros

Próxima vez que alguém perguntar "Por que não usar NoSQL para tudo?", você tem a resposta. 😉


E você? Qual banco usa no seu projeto? Enfrentou algum problema relacionado a transações que ACID teria resolvido? Deixa nos comentários!

Top comments (0)