Arquitetura De Banco De Dados
Trabalho I
Controle de transações e concorrência
PostgreSQL
Transações
ACID
Atomicidade
Uma transação é totalmente executada ou totalmente revertida sem deixar efeitos no
SGBD
É garantida pelos comandos BEGIN e COMMIT. Caso uma transação falhe, um comando de ROLLBACK deve ser executado para retornar os dados ao estado original
Consistência
Individualidade - Isolamento
PostgreSQL utiliza o controle de múltiplas versões (MVCC) para controlar a simultanidade.
Ao consultar o banco de dados cada transação enxerga um snapshot dos dados
(uma versão do banco de dados) como estes eram há um tempo atrás, sem levar em consideração o estado corrente dos dados subjacentes. Este modelo protege a transação contra enxergar dados inconsistentes, o que poderia ser causado por atualizações feitas por transações simultâneas nas mesmas linhas de dados, fornecendo um isolamento da transação para cada sessão do banco de dados.
Problemas de isolamento
Dirty reads -Transação lê registros de outras transações ainda não encerradas
Unreapetable reads - Uma transação lê um conjunto de dados e, tempo depois, descobre que esses dados foram alterados por outra transação encerrada.
Phantom reads - A transação reexecuta uma consulta que retorna um conjunto de linhas que satisfazem uma condição de pesquisa e descobre que o conjunto de linhas que satisfazem a condição mudou devido a uma outra transação efetivada recentemente.
Lost updates - Ocorre quando duas mudanças diferentes são escritas no banco de dados, e a segunda mudança causa a perda da primeira.
Níveis de isolamento
Read Uncommitted - Apenas para conhecimento, PostgreSQL não permite
Read Committed - Nível padrão do PostgreSQL
Repeatable read - Apenas Phantom Reads acontecem (lock do conjunto de dados lidos)
Serializable - Isolamento máximo
Padrões de níveis de isolamento
Nível de isolamento
Dirty Read
Nonrepeatable Read
Phantom Read
Read uncommitted
Possível
Possível
Possível
Read commited
Não