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
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ță
Algoritm pentru testarea serializabilității conflictelor a unei planificări S împreună cu un exemplu de planificare.
- sau
- 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 .
- 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.
- 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) ).
- 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 .
- 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
- Fundamentele sistemelor de baze de date, ediția a 5- a, utilizarea graficelor de prioritate este discutată în capitolul 17, deoarece acestea se referă la testele pentru serializarea conflictelor .
- Abraham Silberschatz, Henry Korth și S. Sudarshan. 2005. Concepte de sisteme de baze de date (5 ed.), PP. 628–630. McGraw-Hill, Inc., New York, NY, SUA.