Compartilhar via


Serializabilidade

O ideal é que as transações sejam serializáveis. Dizem que as transações são serializáveis se os resultados da execução de transações simultaneamente forem os mesmos que os resultados da execução delas em série - ou seja, uma após a outra. Não é importante que a transação seja executada primeiro, apenas que o resultado não reflita nenhuma combinação das transações.

Por exemplo, suponha que a transação A multiplifique os valores de dados por 2 e a transação B adicione 1 aos valores de dados. Agora suponha que haja dois valores de dados: 0 e 10. Se essas transações forem executadas uma após a outra, os novos valores serão 1 e 21 se a transação A for executada primeiro ou 2 e 22 se a transação B for executada primeiro. Mas e se a ordem na qual as duas transações são executadas for diferente para cada valor? Se a transação A for executada primeiro no primeiro valor e a transação B for executada primeiro no segundo valor, os novos valores serão 1 e 22. Se essa ordem for invertida, os novos valores serão 2 e 21. As transações serão serializáveis se 1, 21 e 2, 22 forem os únicos resultados possíveis. As transações não serão serializáveis se 1, 22 ou 2, 21 for um resultado possível.

Então por que a serializabilidade é desejável? Em outras palavras, por que é importante que uma transação seja concluída antes do início da próxima transação? Considere o problema a seguir. Um vendedor está inserindo ordens ao mesmo tempo que um funcionário está enviando contas. Suponha que o vendedor insira um pedido da Empresa X, mas não o confirme; o vendedor ainda está falando com o representante da Empresa X. O funcionário solicita uma lista de todos os pedidos abertos e descobre o pedido da Empresa X e envia-lhes uma fatura. Agora, o representante da Empresa X decide que deseja alterar seu pedido, para que o vendedor o altere antes de confirmar a transação. A empresa X recebe uma fatura incorreta.

Se as transações do vendedor e do funcionário fossem serializáveis, esse problema nunca teria ocorrido. A transação do vendedor teria sido concluída antes do início da transação do funcionário, nesse caso, o funcionário teria enviado a fatura correta, ou a transação do funcionário teria sido concluída antes do início da transação do vendedor, nesse caso, o funcionário não teria enviado uma fatura para a Empresa X.