O modelo ACID de design de banco de dados é um dos mais antigos e importantes conceitos da teoria de banco de dados. Ele define quatro metas que todo sistema de gerenciamento de banco de dados deve se esforçar para atingir: atomicidade, consistência, isolamento e durabilidade. Um banco de dados relacional que não atenda a nenhum desses quatro objetivos pode ser considerado confiável. Um banco de dados que possui essas características é considerado compatível com ACID.
ACID definido
Vamos analisar por um momento cada uma dessas características em detalhes:
- Atomicidade afirma que as modificações do banco de dados devem seguir uma regra de “tudo ou nada”. Cada transação é considerada "atômica". Se uma parte da transação falhar, toda a transação falhará. É fundamental que o sistema de gerenciamento de banco de dados mantenha a natureza atômica das transações, apesar de qualquer DBMS, sistema operacional ou falha de hardware.
- Consistência informa que somente dados válidos serão gravados no banco de dados. Se, por algum motivo, for executada uma transação que viole as regras de consistência do banco de dados, toda a transação será revertida e o banco de dados será restaurado para um estado consistente com essas regras. Por outro lado, se uma transação for executada com sucesso, ela levará o banco de dados de um estado consistente com as regras para outro estado que também seja consistente com as regras.
- Isolamento exige que várias transações que ocorrem ao mesmo tempo não afetem a execução uma da outra. Por exemplo, se Joe emite uma transação em um banco de dados ao mesmo tempo em que Mary emite uma transação diferente, as duas transações devem operar no banco de dados de maneira isolada. O banco de dados deve realizar toda a transação de Joe antes de executar Mary ou vice-versa. Isso impede que a transação de Joe leia dados intermediários produzidos como um efeito colateral de parte da transação de Mary que não será, por fim, comprometida com o banco de dados. Observe que a propriedade de isolamento não garante que transação será executada primeiro - apenas que as transações não irão interferir umas nas outras.
- Durabilidade garante que qualquer transação confirmada no banco de dados não será perdida. A durabilidade é garantida por meio do uso de backups de bancos de dados e logs de transações que facilitam a restauração de transações confirmadas, apesar de qualquer falha subseqüente de software ou hardware.
Como o ACID funciona na prática
Os administradores de banco de dados usam várias estratégias para impor o ACID.
Um usado para impor atomicidade e durabilidade é gravação antecipada (WAL), em que qualquer detalhe de transação é primeiro gravado em um log que inclui refazer e desfazer informações. Isso garante que, devido a uma falha no banco de dados de qualquer tipo, o banco de dados possa verificar o log e comparar seu conteúdo com o estado do banco de dados.
Outro método usado para tratar a atomicidade e durabilidade é paginação de sombra, em que uma página de sombra é criada quando os dados devem ser modificados. As atualizações da consulta são gravadas na página de sombra, em vez de nos dados reais no banco de dados. O próprio banco de dados é modificado somente quando a edição é concluída.
Outra estratégia é chamada de comutação de duas fases protocolo, especialmente útil em sistemas de banco de dados distribuídos. Esse protocolo separa uma solicitação para modificar dados em duas fases: uma fase de solicitação de confirmação e uma fase de confirmação. Na fase de solicitação, todos os SGBDs em uma rede que são afetados pela transação devem confirmar que eles a receberam e que têm a capacidade de realizar a transação. Uma vez recebida a confirmação de todos os DBMSs relevantes, a fase de confirmação é concluída, na qual os dados são realmente modificados.