Preferensgraf

En prioritetsgraf , även kallad konfliktgraf och serialiseringsgraf , används i samband med samtidighetskontroll i databaser .

Preferensgrafen för ett schema S innehåller:

  • En nod för varje genomförd transaktion i S
  • En båge från T i till T j om en åtgärd av T i föregår och står i konflikt med en av T j: s handlingar. Det vill säga att åtgärderna tillhör olika transaktioner, åtminstone en av åtgärderna är en skrivoperation, och åtgärderna kommer åt samma objekt (läs eller skriv).

Exempel på prioritetsdiagram

Exempel 1

Exempel 1

Exempel 2

En prioritetsgraf för schemat D, med 3 transaktioner. Eftersom det finns en cykel (av längd 2; med två kanter) genom de genomförda transaktionerna T1 och T2, är detta schema (historik) inte konfliktserialiserbart . Lägg märke till att förpliktelsen av transaktion 2 inte har någon betydelse när det gäller skapandet av en prioritetsgraf.

Testar serialiserbarhet med Precedence Graph

Testa serialiseringsexempel

Algoritm för att testa konfliktserialisering av ett schema S tillsammans med ett exempelschema.

eller

  1. För varje transaktion T x som deltar i schema S, skapa en nod märkt Ti i prioritetsdiagrammet. Sålunda innehåller prioritetsgrafen T 1 , T 2 , T 3 .
  2. För varje fall i S där T j exekverar ett read_item (X) efter att T i exekverar ett write_item (X), skapa en kant (T i → T j ) i prioritetsgrafen. Detta förekommer ingenstans i exemplet ovan, eftersom det inte finns någon läsning efter skrivning.
  3. För varje fall i S där T j exekverar ett write_item (X) efter att T i exekverar ett read_item (X), skapa en kant (T i → T j ) i prioritetsgrafen. Detta resulterar i en riktad kant från Ti till T2 ( eftersom Ti har R (A) före T2 som har W(A) ).
  4. För varje fall i S där T j exekverar en write_item (X) efter att Ti exekverar en write_item (X), skapa en kant (T i → T j ) i prioritetsgrafen. Detta resulterar i riktade kanter från T2 till T1 , T2 till T3 och T1 till T3 .
  5. Schemat S är serialiserbart om och endast om prioritetsgrafen inte har några cykler. Eftersom T 1 och T 2 utgör en cykel är exemplet ovan inte (konflikt) serialiserbart.

externa länkar