O que é uma transação?
Uma transação é um grupo de operações que têm as seguintes propriedades: atomic, consistent, isolated e durable (ACID). O suporte a transações permite que novos tipos de aplicativos sejam desenvolvidos, simplificando o processo de desenvolvimento e tornando o aplicativo mais robusto. O restante deste tópico fornece cenários que demonstram a necessidade dessas propriedades e, em seguida, uma tabela que define cada propriedade.
Em um grupo atômico de operações, cada operação no grupo deve ter êxito ou os efeitos de todas elas devem ser desfeitos (também conhecido como reversão). Por exemplo, uma transferência bancária deve ser um conjunto atômico de duas operações: um débito de uma conta e um crédito para outra conta. O débito e o crédito devem ser implementados como um grupo atômico. Se essas duas operações não forem bem-sucedidas, então a transferência será injustamente a favor do banco ou do titular da conta.
O requisito de consistência significa que os dados são consistentes após a transação (supondo que começamos com um sistema consistente antes da transação). Para o exemplo de transferência bancária, a consistência pode ser definida como tendo o saldo combinado da conta das duas contas como uma constante. Para implementar a consistência no exemplo de transferência bancária, as operações de débito e crédito simplesmente precisam ser para a mesma quantidade de dinheiro.
Outro exemplo de uma transação é uma atualização para um site. Um site de comércio eletrônico exige que uma nova página de navegação de categoria de produto apareça exatamente ao mesmo tempo que as páginas de detalhes do produto que descrevem os novos produtos. Nesse caso, é necessário atualizar e adicionar várias entradas de diretório sob o controle de uma transação. Não só é necessário que as atualizações sejam atômicas, mas também é necessário que um cliente que está fazendo compras no momento não veja as atualizações em andamento. Este é um exemplo da propriedade de isolamento de transações.
A propriedade de durabilidade requer que, após a conclusão de uma atualização, seus efeitos persistam mesmo que o sistema pare de responder. No exemplo anterior, a durabilidade pode ser fornecida simplesmente garantindo a recuperação de dados adequada para que todas as novas entradas do sistema de arquivos que representam a adição de um novo produto ao site apareçam depois que um sistema para de responder. Isso requer um sistema com mecanismos de backup, recuperação e alta disponibilidade de dados.
A garantia da atomicidade de uma transação, bem como as outras propriedades, está presente diante de qualquer número de falhas, incluindo falhas que ocorrem durante a fase de recuperação de uma falha anterior. Eventualmente, o sistema atingirá um dos dois estados: todas as operações foram aplicadas ou nenhuma das operações foi aplicada.
As propriedades de uma transação são resumidas na tabela a seguir.
Termo | Descrição |
---|---|
Atômica |
Todas as operações na transação são bem-sucedidas ou nenhuma das operações persiste. |
Consistente |
Se os dados forem consistentes antes do início da transação, eles serão consistentes após a conclusão da transação. |
Isolado |
Os efeitos de uma transação em andamento são ocultos de todas as outras transações. |
Durável |
Quando uma transação é concluída, seus resultados são persistentes e sobreviverão a uma falha do sistema. |
Essas propriedades garantem que o software possa lidar com erros inesperados, pois ele pode simplesmente anular uma transação quando uma situação inesperada impede uma conclusão bem-sucedida. A infraestrutura de transação garante que todos os efeitos da transação anulada sejam revertidos, retornando os dados para um estado consistente. Portanto, um sistema transacional permite uma recuperação normal de falhas do sistema.
Para garantir as propriedades ACID, um sistema que dá suporte a transações deve ter uma funcionalidade de registro em log robusta que possa ser usada para confirmar ou reverter transações conforme necessário. Para obter mais informações, consulte Common Log File System.