gustavovzqz / 2v2pl

Implementation of the 2V2PL protocol for concurrency control with support for multiple lock granularities and deadlock detection/prevention using the wait-for graph strategy.
0 stars 0 forks source link

Definir EXATAMENTE o que precisa ser feito. #1

Closed gustavovzqz closed 1 month ago

gustavovzqz commented 2 months ago

O protocolo 2V2PL SEM MÚLTIPLA GRANULOSIDADE e SEM BLOQUEIO DO TIPO UPDATE possui a seguinte tabela de bloqueios:

$rl_i(x)$ $wl_i(x)$ $cl_i(x)$
$rl_j(x)$ + + -
$wl_j(x)$ + - -
$cl_j(x)$ - - -

O objetivo dessa issue é responder as seguintes perguntas em relação ao protocolo desse projeto:

1. Em um protocolo de múltipla granulosidade, uma árvore modela a propagação do bloqueio para os descendentes e ascendentes. É necessário fazer isso nesse caso? (lembre-se que o bloqueio propagado não é necessariamente o mesmo bloqueio do nó)

2. Se as operações possuem múltipla granulosidade, o input original precisa especificar exatamente o objeto tratado (uma tupla? uma página?) Dito isso, duas alternativas podem surgir:

  1. Uma instância do banco de dados será definida e as operações precisam ser referentes aos objetos criados.

  2. Os objetos serão instanciados conforme processamento das próprias consultas. Se uma consulta deseja ler uma tupla em página tal em tabela tal, ela precisa definir exatamente isso na consulta e o objeto será instanciado em tempo de execução.

No primeiro exemplo, a consulta segue um padrão bem próximo ao do livro e a árvore da primeira pergunta mas os objetos precisam ser instanciados anteriormente. No segundo, os objetos são instanciados conforme consulta, que precisa ser melhor especificada.

gustavovzqz commented 2 months ago

Resposta do que eu acho que seja o ideal até o momento:

Provavelmente a tabela de bloqueio será parecida com essa:

$rl_i(x)$ $wl_i(x)$ $ul_i(x)$ $irl_i(x)$ $iwl_i(x)$ $iul_i(x)$
$rl_j(x)$ + - - + - -
$wl_j(x)$ - - - - - -
$ul_j(x)$ + - - + - -
$irl_j(x)$ + - - + + +
$iwl_j(x)$ - - - + + +
$iul_j(x)$ + - - + + +

Com a adição do bloqueio do tipo certify lock e com o ajuste das compatibilidades que envolvem o protocolo 2V2PL (escrita e leitura...)

1.

Sim, é necessário.

2.

A melhor alternativa é montar todo o esquema do banco de dados antes, declarando no código como o banco deve ser.

$\text{Banco de Dados} \rightarrow \text{Tablespace} \rightarrow \text{Tabela} \rightarrow \text{Página} \rightarrow \text{Tupla}$

Pode ser o caso de remover o "Tablespace".