Grafico della precedenza - Precedence graph

Un grafo di precedenza , anche chiamato grafo dei conflitti e serializzabilità grafico , viene utilizzato nel contesto di controllo della concorrenza in banche dati .

Il grafico di precedenza per una pianificazione S contiene:

  • Un nodo per ogni transazione sottoposta a commit in S
  • Un arco da Ti a T j se un'azione di Ti precede e va in conflitto con una delle azioni di T j . Cioè le azioni appartengono a transazioni diverse, almeno una delle azioni è un'operazione di scrittura e le azioni accedono allo stesso oggetto (lettura o scrittura).

Esempi di grafici di precedenza

Esempio 1

Image
Esempio 2

Esempio 2

Un grafico di precedenza della pianificazione D, con 3 transazioni. Poiché esiste un ciclo (di lunghezza 2; con due fronti) attraverso le transazioni impegnate T1 e T2, questa pianificazione (cronologia) non è serializzabile in conflitto . Si noti che il commit della Transazione 2 non ha alcun significato per quanto riguarda la creazione di un grafico di precedenza.

Test della serializzabilità con il grafico delle precedenza

Image
Esempio di serializzabilità di test

Algoritmo per testare la serializzabilità dei conflitti di una pianificazione S insieme a una pianificazione di esempio.

o

  1. Per ogni transazione T x che partecipa alla pianificazione S, creare un nodo etichettato Ti nel grafico delle precedenza. Quindi il grafico delle precedenza contiene T 1 , T 2 , T 3 .
  2. Per ogni caso in S in cui T j esegue un read_item (X) dopo che T i esegue un write_item (X), creare un arco (T i → T j ) nel grafico delle precedenze. Ciò non si verifica da nessuna parte nell'esempio precedente, poiché non c'è lettura dopo la scrittura.
  3. Per ogni caso in S dove T j esegue un write_item (X) dopo T i esegue un read_item (X), crea un bordo (T i → T j ) nel grafico precedenza. Ciò si traduce in un fronte diretto da T 1 a T 2 (poiché T 1 ha R (A) prima che T 2 abbia W (A) ).
  4. Per ogni caso in S dove T j esegue un write_item (X) dopo T i esegue un write_item (X), crea un bordo (T i → T j ) nel grafico precedenza. Ciò si traduce in bordi diretti da T 2 a T 1 , T 2 a T 3 e T 1 a T 3 .
  5. La pianificazione S è serializzabile se e solo se il grafico delle precedenza non ha cicli. Poiché T 1 e T 2 costituiscono un ciclo, l'esempio precedente non è serializzabile (conflitto).

Riferimenti

link esterno