Grafic de precedență - Precedence graph

Un grafic prioritate , numit , de asemenea , graficul de conflict și serializabilitate grafic , este utilizat în contextul controlului concurenței în bazele de date .

Graficul de prioritate pentru un program S conține:

  • Un nod pentru fiecare tranzacție angajată în S
  • Un arc de la T i la T j dacă o acțiune a lui T i precede și intră în conflict cu una dintre acțiunile lui T j . Adică acțiunile aparțin unor tranzacții diferite, cel puțin una dintre acțiuni este o operație de scriere, iar acțiunile accesează același obiect (citire sau scriere).

Exemple de grafice de precedență

Exemplul 1

Image
Exemplul 2

Exemplul 2

Un grafic de prioritate al graficului D, cu 3 tranzacții. Deoarece există un ciclu (de lungime 2; cu două margini) prin tranzacțiile angajate T1 și T2, acest program (istoric) nu este serializabil Conflict . Observați că comiterea tranzacției 2 nu are nicio semnificație în ceea ce privește crearea unui grafic de prioritate.

Testarea serializabilității cu graficul de precedență

Image
Exemplu de testare a serializabilității

Algoritm pentru testarea serializabilității conflictelor a unei planificări S împreună cu un exemplu de planificare.

sau

  1. Pentru fiecare tranzacție T x care participă la programul S, creați un nod etichetat T i în graficul de precedență. Astfel, graficul de prioritate conține T 1 , T 2 , T 3 .
  2. Pentru fiecare caz în S unde T j execută un read_item (X) după ce T i execută un write_item (X), creați o margine (T i → T j ) în graficul de precedență. Acest lucru nu se întâmplă nicăieri în exemplul de mai sus, deoarece nu există citire după scriere.
  3. Pentru fiecare caz în S unde T j execută un element write_item (X) după ce T i execută un read_item (X), creați o margine (T i → T j ) în graficul de precedență. Aceasta are ca rezultat o margine direcționată de la T 1 la T 2 (deoarece T 1 are R (A) înainte ca T 2 să aibă W (A) ).
  4. Pentru fiecare caz în S în care T j execută un element write_ (X) după ce T i execută un write_item (X), creați o margine (T i → T j ) în graficul de precedență. Acest lucru are ca rezultat muchii direcționate de la T 2 la T 1 , T 2 la T 3 și T 1 la T 3 .
  5. Programul S este serializabil dacă și numai dacă graficul de precedență nu are cicluri. Deoarece T 1 și T 2 constituie un ciclu, exemplul de mai sus nu este serializabil (conflict).

Referințe

linkuri externe