Banco de dados transacional e o tal do ACID

Os bancos de dados transacionais seguem o princípio ACID para garantir que cada operação seja segura e consistente. Neste artigo, apresento como esses princípios (Atomicidade, Consistência, Isolamento e Durabilidade) são essenciais para a integridade das transações.

Banco de dados transacional e o tal do ACID
ACID by Rodrigo Rodam

Imagine que você está fazendo uma compra online. Você escolhe o produto, vai até o checkout, insere os dados do cartão, e, após a confirmação, espera receber o e-mail com os dados do pedido. Mas e se, nesse processo, o valor for debitado do seu cartão, mas o pedido não aparecer no sistema da loja? Ou, ainda pior, se o sistema debitar duas vezes? Situações como essa seriam um pesadelo, tanto para o cliente quanto para a empresa.

É aí que entram os bancos de dados transacionais, acompanhados do famoso modelo ACID: Atomicidade, Consistência, Isolamento e Durabilidade.

Esses princípios garantem que as transações sejam seguras, precisas e consistentes, mesmo quando algo dá errado. No artigo de hoje, quero explorar como o ACID evita esses problemas e mantém a confiança em processos críticos do nosso cotidiano, como uma simples compra online ou reservar um lugar no cinema. Afinal, a magia da transação bem-sucedida está no que você não vê.

Um banco de dados transacional é projetado para gerenciar e garantir a integridade de transações que envolvem operações como leitura, inserção, atualização ou exclusão de dados. Esses bancos de dados seguem o modelo ACID para garantir que todas as transações sejam executadas de maneira confiável e que os dados permaneçam íntegros, mesmo em caso de falhas.

Principais características de um banco de dados transacional

As principais características de um banco de dados transacional são o suporte a transações, implementação dos princípios ACID, logs de transação e locks (bloqueios).

Uma transação é um conjunto de ações realizadas no banco de dados que precisa ser executado completamente ou não ser feito de jeito nenhum. Pense nela como uma tarefa única: ou tudo dá certo e ela é concluída, ou, se algo der errado, o sistema desfaz tudo, voltando ao ponto inicial. Isso garante que os dados fiquem sempre consistentes e confiáveis, como quando você transfere dinheiro entre contas e o valor sai de uma e entra na outra corretamente.

Entendendo o ACID

Como vimos anteriormente, o ACID é um conjunto de princípios fundamentais que definem as características essenciais de uma transação em bancos de dados. Ele é conjunto de regras ou garantias que asseguram a integridade e confiabilidade das operações em um sistema de gerenciamento de banco de dados. Vamos entender um a um esses princípios.

Atomicidade

A atomicidade significa que as transações são tratadas como uma única unidade de operação. Isso quer dizer que todas as operações em uma transação devem ser concluídas com sucesso ou nenhuma delas deve ser aplicada. Se houver uma falha durante o processo, o banco de dados deve reverter todas as alterações feitas até aquele ponto, garantindo que nenhuma parte da transação seja parcialmente aplicada.

Atomicidade

Consistência

A transação deve levar o banco de dados de um estado consistente para outro. Isso significa que, após a execução de uma transação, os dados devem atender a todas as regras de integridade definidas (como restrições de chave estrangeira ou regras de validação). Se alguma regra for violada durante a transação, ela será desfeita.

Consistência

Isolamento

As transações são executadas de maneira independente. Mesmo que várias transações estejam sendo processadas simultaneamente, o banco de dados deve garantir que elas não interfiram umas nas outras, como se estivessem sendo processadas uma por vez. Isso evita problemas como dirty reads, onde uma transação lê dados que ainda não foram confirmados por outra transação.

Dirty reads é quando uma transação consegue visualizar dados que ainda não foram confirmados por outra transação. Imagine que uma pessoa está atualizando o saldo de uma conta bancária, mas ainda não terminou o processo. Se outra pessoa tentar ver esse saldo antes da confirmação, ela pode ver um valor incorreto, que depois pode ser desfeito se a transação inicial falhar. Esse tipo de leitura "suja" pode causar erros e inconsistências nos dados.
Isolamento

Durabilidade

Depois que uma transação é concluída, as alterações feitas no banco de dados são permanentes e sobrevivem a falhas, como quedas de energia ou erros de sistema. Isso é possível por meio de mecanismos como logs de transações, que garantem a recuperação dos dados em caso de falhas.

Durabilidade

Casos de uso

Esses princípios permeiam praticamente todos os sistemas que utilizamos. Desde aplicações financeiras até jogos on-line. Porém, para deixar mais claro sua importância, vejamos algumas aplicações comuns:

Setor de saúde

Imagine que em um hospital, várias equipes médicas estão atualizando o prontuário de um paciente ao mesmo tempo – uma equipe registra dados de medicação, outra registra exames e outra ainda monitora sinais vitais. O princípio de isolamento evita que uma transação interfira na outra, prevenindo erros como dosagem incorreta de medicamentos ou informações desatualizadas.

Ou ainda, o sistema de estoque precisa garantir que cada alteração no inventário ocorra de forma precisa. Se houver uma falha ao processar uma entrada de medicamento, o princípio de atomicidade garante que a operação seja revertida, evitando que o sistema registre estoque incorreto.

Logística e cadeia de suprimentos

Em uma cadeia de distribuição, cada vez que uma unidade é retirada do estoque ou adicionada, o sistema precisa assegurar que essas operações sejam registradas com precisão. A consistência assegura que, ao final de cada transação, o inventário seja atualizado para refletir o estado real, respeitando restrições como limites de estoque mínimo e máximo.

O modelo ACID garante que, se uma transação de transferência de itens entre dois depósitos falhar no meio do processo, ela seja revertida, impedindo que produtos desapareçam ou sejam duplicados.

Energia e utilidades públicas

Empresas de energia lidam com medições de consumo e faturamento para milhões de clientes. O princípio de durabilidade é essencial para garantir que, após o cálculo da fatura, os dados permanecem intactos e prontos para referência futura, mesmo que ocorram falhas no sistema.

As operações como o desligamento de uma linha de transmissão ou a ativação de uma nova estação de energia envolvem várias transações simultâneas no banco de dados. A atomicidade garante que cada operação seja concluída completamente, evitando situações de interrupção parcial que poderiam causar apagões.

Telecomunicações

Quando um cliente realiza uma alteração no plano de dados ou assina um novo serviço, o princípio de consistência assegura que todas as restrições e validações necessárias sejam cumpridas. Isso evita, por exemplo, que um cliente tenha acesso a um pacote de dados antes de sua aprovação ou pagamento.

Outra situação, em serviços pré-pagos, cada chamada ou uso de dados reduz o saldo do cliente. O isolamento é fundamental para garantir que cada transação seja contabilizada corretamente, evitando que diferentes transações interfiram entre si e levando a inconsistências no saldo.

Transporte e aviação

No processo de reservas de assentos em aviões, é extremamente importante que um mesmo assento não seja vendido para duas pessoas. O princípio de isolamento assegura que, mesmo quando várias reservas são feitas simultaneamente, o banco de dados não registre a duplicidade.

Além disso, as transações relacionadas à atualização do histórico de manutenção de aeronaves precisam garantir durabilidade, já que qualquer falha no registro de uma atualização pode comprometer a segurança.

Exemplos de bancos de dados transacionais

Uma vez que já entendemos alguns casos de uso, vejamos alguns produtos que implementam esses princípios:

  • MySQL, PostgreSQL, Oracle, Microsoft SQL Server, IBM DB2 entre outros

Esses bancos são amplamente utilizados nos mais diversos casos de uso, incluindo os que citei anteriormente. Há diversos fatores que fazem com que uma organização escolha entre um ou outro fornecedor, como custo, stack tecnológica, capacitação do time, entre outros.

Uma característica comum a todos esses bancos de dados que exemplifiquei é que são bancos de dados relacionais, ou seja, armazenam os dados de forma estruturada, em formato de tabelas, contendo linhas e colunas e obedecendo uma estrutura lógica baseada na álgebra relacional.

Existem outros tipos de bancos de dados que armazenam os dados em formatos não tão estruturados como tabelas, assim como existem bancos de dados que não implementam todos os princípios ACID, porém cada solução tem o seu uso específico e o problema que estamos resolvendo é que direcionará a melhor escolha.


Para concluir, podemos ver que os bancos de dados transacionais e o modelo ACID são pilares essenciais para garantir a integridade e confiabilidade das transações em diversos sistemas que usamos diariamente. Desde compras online até operações bancárias, o ACID nos protege de inconsistências e falhas que poderiam comprometer tanto a experiência do usuário quanto a segurança dos dados.

Se você quer explorar mais sobre como implementar esses conceitos, na prática, ou quer saber como escolher o banco de dados certo para o seu projeto, continue me acompanhando, você pode receber esse tipo de conteúdo diretamente no seu e-mail, inscreva-se. Se gostou deste artigo, compartilhe e comente suas impressões!