Já aqui tinha falado sobre níveis de isolamento da base de dados, neste post irei explicar as principais diferenças entre o Serializable e o Snapshot Isolation, enunciando as principais vantagens de cada um.
Antes de mais, uma breve explicação do que consiste o Snapshot Isolation. Em base de dados, o nível de isolamento Snapshot, consiste em permitir as transacções operar sobre um imagem da base de dados (daí o nome snapshot), garantindo assim que todas as operações realizadas por uma transacção irão “ver” uma versão consistente da base de dados e apenas irá submeter as mudanças efectuadas se não foi feita nenhuma alteração concorrente desde o momento do snapshot. Caso duas transacções concorrentes modifiquem os mesmos dados, uma delas vai ter que falhar e fazer roll-back, começando do inicio.
Tanto o nível Serializable e o Snapshot Isolation oferecem consistência durante uma transacção, são as duas seguras não permitindo nenhum dos fenómenos indesejados falados no post anterior, a diferença entre os dois é que o Snapshot Isolation é um método de controlo de concorrência optimista enquanto o Serializable é pessimista, isto porque o snapshot parte do principio que não irá ocorrer conflitos entre transacções, e caso haja cancela a transacção e faz rollback, permitindo assim um elevado nível de concorrência, já o Serializable é pessimista porque parte do principio que vai ocorrer muitos conflitos causado pelo acesso aos dados, logo impede transacções concorrentes garantindo a consistência mas reduzindo a concorrência. Destes dois métodos o Snapshot Isolation é mais eficaz pois o Serializable adquire range-locks de maneira a garantir que mais nenhuma transacção concorrente vai aceder aos mesmos dados o que diminui muito o desempenho, pois como já foi dito, apesar de garantir consistência diminui drasticamente a concorrência. Já o Snapshot Isolation por sua vez não adquire qualquer lock de dados, em vez disso a transacção trabalho sobre uma imagem da base de dados tirado no inicio da transacção, permite portanto o máximo nível de concorrência, caso duas transacções modifiquem os mesmo dados ao mesmo tempo, uma delas vai ter que falhar e fazer roll-back.
Filed under: Bases de Dados, Informatica | Tagged: base de dados, BD, niveis de isolamento, sql | Leave a comment »