Protocolos de Multiversão
O protocolo MVCC permite que um dado mantenha seus valores antigos; assim a cada operação de escrita é criado novas versões do dao e na operação de leitura o SGBD escolhe a versão mais apropriada do dado em questão garantindo a serialização.
Esquema multiversão – Gera nova copia do item Q a cada write (Q) – Operacao read (Q) seleciona copia apropriada do item Q
A vantagem desse funcionamento é a recuperação dos dados através do histórico de evolução dos dados, BD temporal (caso extremo de armazenamento de dados historicos). Por outro lado, a desvantagem é o custo de armazenar várias versões de objetos no banco de dados.
Multiversão com ordenação por timestamp
- Cada versão do dado possui timestamps de leitura (R-TS) e escrita (W-TS), além do valor do dado.
- Uma transação T sempre acessa a versão Qk do dado com o maior W-TS que seja menor ou igual a TS(T).
- A transação T sempre lê a versão Qk
- Ao escrever, T é desfeita se TS(T) < R-TS(Qk ); senão, se TS(T) = W-TS(Qk ), o valor de Qk é alterado; caso contrário, uma nova versão de Q é criada.
- Versões antigas, com W-TS(Qk ) < TS(T), sendo T a última transação executada, podem ser removidas.
Funiconamento:
- Se Ti faz read(Q), entao valor retornado e Qk - Se TS(Ti) < R-TS(Qk ) então Ti é refeita, CC uma nova versão de Qk é criada. • Vantagem deste esquema é que a operação read nunca falha e nunca é atrasada. Desvantagem é atualizar R-TS a cada read; precisa refazer Ti em caso de conflito .
Exemplo:
T1
T2
Timestamps
Read (Aplic);
Aplic.Saldo –= 500
Write (Aplic);
TS(T1) = 1
R-TS(Aplic1) = 1
W-TS(Aplic2) = 1
Read (Conta);
Read (Aplic);
Print (Conta.Saldo + Aplic.Saldo);
TS(T2) = 2
R-TS(Conta1) = 2
R-TS(Aplic2) = 2
Read (Conta);
Conta.Saldo += 500;
Write (Conta);
R-TS(Conta1) = 2
R-TS(Conta1) > TS(T1) à T1 e T2 abortadas
T1
T2
read(p) p = p – 20 write(p) read(p) p = p + 30 write(p) read(d)