Konfliktigraafi (englanniksi precedence graph, conflict graph tai serializability graph) on graafi, jota käytetään tietokantojen transaktioiden konflikti-sarjallistuvuuden havaitsemiseen.

Vastaavaa menetelmää käytetään myös lukkiutumien (deadlock) havaitsemiseen. Tällaista graafia kutsutaan Wait-for -graafiksi[1].

Konfliktigraafi. Ajoituksessa on silmukka transaktioiden 1 ja 2 välillä. Se ei ole sarjallistuva.

Nimensä mukaisesti kyseessä on graafi. Yksi graafi kuvastaa aina yhtä ajoitusta (engl. schedule, joukkoa transaktioita). Graafi koostuu kahdenlaisista elementistä:

  • Solmukohdat (kuvassa sininen ympyrä). Solmukohtia on yksi jokaista transaktiota kohden. Siihen merkitään transaktion numero ja usein myös kirjain T.
  • Nuolet. Lisätään, kun transaktioiden operaatiot ovat ns. konfliktissa. Mikäli konfliktitilanne löytyy (yksi tai useampi), piirretään nuoli aikaisemmin suoritettavan operaation transaktiosta vanhempaan transaktioon.

Konfliktin määritelmä muokkaa

Operaatiot konfliktoivat, jos kaikki kolme ehtoa täyttyvät:

  • ne kuuluvat eri transaktioihin
  • ne kohdistuvat samaan tietoalkioon
  • ainakin toinen operaatio on kirjoitus-operaatio.

Esimerkiksi operaatiot R1(X), W2(X) konfliktoituvat.

Sarjallistuvuuden löytäminen muokkaa

  1. Etsitään konfliktoituvat operaatiot. Tehdään nuolet aina jos konflikteja (yksi tai useampi) löytyy. Yksi nuoli riittää. Piirretään ensimmäiseksi olevasta tapahtumasta (Ti) nuoli myöhempään operaatioon (Tj). Riittää, että nuoli piirretään vain kerran. Mahdollisia konfliktitilanteita on siis:
    1. Ti on kirjoitusoperaatio, Tj lukuoperaatio
    2. Ti on lukuoperaatio, Tj kirjoitusoperaatio
    3. Ti ja Tj ovat molemmat kirjoitusoperaatioita
  2. Lopuksi tarkastellaan, muodostuuko kahden solmukohdan välille silmukka (myös nimellä sykli). Jos verkossa on sykli/silmukka, vastaava ajoitus ei ole sarjallistuva, muuten on. Kuvan esimerkki ei ole konfliktisarjallistuva. Sarjallistuva aikataulu on aikataulu, jossa Ti tulee ennen Tj:tä. Syklillisessä graafissa tämä ei ole mahdollista.[1]

Huom. Sykli voi syntyä useamman kohteen välille. Esimerkiksi T1 -> T2 -> T3 -> T1.

Esimerkki muokkaa

Esimerkki sarjallistuvasta aikataulusta S1. Huomataan seuraavat konfliktit:

  • T1 kirjoittaa kohteeseen X, jota T2 käsittelee myöhemmin. Nuoli T1->T2. Myös resurssiin Y kohdistuu konflikti.
  • T3 kirjoittaa Z:aan, jota T2 lukee heti seuraavaksi. Nuoli T3 -> T2. Myös resurssiin Y kohdistuu konflikti.
  • T3 -> T1 (resurssi Y)

Todetaan lopuksi, ettei sykliä ole. Esimerkki sarjallistuvasta aikataulusta voisi olla esimerkiksi T3, T2, T1

S1
T1 T2 T3
R(Y)
R(Z)
R(X)
W(X)
W(Y)
W(Z)
R(Z)
R(Y)
W(Y)
R(Y)
W(Y)
R(X)
W(X)

Lähteet muokkaa

  1. a b Elmasri & Navathe: Fundamentals of Database Systems, s. 545. The Benjamin/Cummings publishing company, Inc., 1994.