quarta-feira, 8 de setembro de 2010

Transação (conceitual)

O que é?
É uma seqüência de operações executadas como uma única unidade lógica de trabalho.
Uma unidade lógica de trabalho para que seja qualificada como uma transação deve mostrar quatro propriedades, designadas pelas iniciais ACID (Atomicidade, Consistência, Isolamento e Durabilidade).

TUDO ou NADA
Exemplo:
Considere um banco de dados de uma instituição financeira, contendo o saldo da conta corrente de vários clientes, assim como o saldo total dos depósitos de cada agência.

Suponha que eu deseje transferir R$100.00 reais de minha conta para a conta de Joãozinho (clássico heheh).

A contabilidade do banco quer ter certeza que todas estas atualizações foram realizadas, ou que nenhuma delas foi realizada.

Com certeza não é interessante que uma falha no sistema faça com que Joãozinho receba R$100.00 reais que não foi debitado de minha conta. Além disso, eu não continuaria sendo um cliente satisfeito se o dinheiro fosse debitado de minha conta e não fosse creditado na conta de Joãozinho.

É necessário garantir que, caso aconteça algo errado no meio da operação, nenhum dos passos executados até este ponto irá valer.

Agrupar as atualizações em uma transação dá esta garantia.
Desejamos, também, ter a garantia de estando a transação completa e aceita pelo sistema de banco de dados que a mesma fique definitivamente gravada, e não seja perdida mesmo no caso de acontecer uma pane logo em seguida.

Por exemplo, se estiver sendo registrado um saque em dinheiro pelo Joãozinho, não se deseja, de forma alguma, que o débito em minha conta corrente desapareça por causa de uma pane ocorrida logo depois do Joãozinho sair da agência.

Um banco de dados transacional garante que todas as atualizações realizadas por uma transação fiquem registradas em um meio de armazenamento permanente (ou seja, em disco), antes da transação ser considerada completa.

Outra propriedade importante dos bancos de dados transacionais está muito ligada à noção de atualizações atômicas: quando várias transações estão executando ao mesmo tempo, nenhuma delas deve enxergar as alterações incompletas efetuadas pelas outras.

Por exemplo, se uma transação está ocupada totalizando o saldo de todas as agências, não pode ser visto o débito efetuado na minha conta, mas ainda não creditado na agência de Joãozinho, nem o contrário.

Portanto, as transações devem ser tudo ou nada não apenas em termos do efeito permanente no banco de dados, mas também em termos de visibilidade durante o processamento.

As atualizações feitas por uma transação em andamento não podem ser vistas pelas outras transações enquanto não terminar, quando todas as atualizações se tornam visíveis ao mesmo tempo.

Vantagens:

  • Atomicidade:
    É a capacidade de uma transação ler
    todas as suas operações executadas ou nenhuma delas.

  • Consistência:
    Indica que a base de dados está consistente no início da transação e ao seu final, porém durante a transação certas regras podem ser quebradas.

  • Isolamento:
    Capacidade das operações de uma transação não serem vistas pelas outras transações até que esta esteja encerrada.

  • Durabilidade:
    Indica que depois de uma transação ser executada com sucesso, as alterações efetuadas persistam e não sejam desfeitas.

Desvantagens:

  • Performance:
    Se a seqüência de execução for longa demais e bem no meio dessa execução correr algo inesperado, sendo assim como a transação utiliza o conceito
    ACID a seqüência será executada novamente.

  • Escalabilidade:
    Utilizando transação não é possível a escalabilidade.

Nenhum comentário:

Postar um comentário

DÚVIDAS - CRITICAS - SUGESTÕES