Konflikt-Äquivalenz

Zwei Schedules sind konflikt-äquivalent, wenn die Reihenfolge aller Aktionen in Konflikt in beiden Schedules gleich sind.

Um die Konflikt-Äquivalenz zweier Schedules zu überprüfen, konstruiert man die Präzedenzgraphen für Aktionen in Konflikt (Konfliktgraphen) für beide Schedules. Beispielhaft ist hier der Konfliktgraph für den Schedule

r2(X) r1(X) w1(Z) w2(X) w2(Y) c2 w1(Y) c1 r3(X) r3(Y) w3(Z) c3

angegeben (siehe die Abbildung unten).

Für jede Transaktion fügt man einen Knoten in den Konfliktgraph ein. Dann fügt man für jedes Paar von Aktionen in Konflikt eine Kante ein, die mit dem Namen des betroffenen Datenobjekts beschriftet ist.

Die sechs Kanten kommen wie folgt zu Stande:

• Kante "X" von 1 nach 2, weil r1(X) vor w2(X) steht;
• Kante "Y" von 2 nach 1, weil w2(Y) vor w1(Y) steht;
• Kante "X" von 2 nach 3, weil w2(X) vor r3(X) steht;
• Kante "Y" von 2 nach 3, weil w2(X) vor r3(X) steht;
• Kante "Y" von 1 nach 3, weil w1(Y) vor r3(Y) steht und
• Kante "Z" von 1 nach 3, weil w1(Z) vor w3(Z) steht.

Wenn die Konfliktgraphen der zwei Schedules gleich sind, heißen die Schedules konflikt-äquivalent.

Anstelle nun Konfliktgraphen für jeden seriellen Schedule zu bilden und dann deren Gleichheit mit dem vorliegenden Graphen zu überprüfen, genügt zur Prüfung auf Konflikt-Serialisierbarkeit die Feststellung, ob der Konfliktgraph einen Kreis enthält oder nicht.

Genau dann, wenn der Konfliktgraph des Schedules keinen Kreis enthält, ist er konflikt-äquivalent zu mindestens einem seriellen Schedule.

Wenn der Konfliktgraph keinen Kreis enthält, können die Knoten des Graphen auf mindestens eine Weise topologisch sortiert werden. Die sich ergebende Reihenfolge bestimmt den seriellen Schedule, zu dem der gegebene Schedule konflikt-äquivalent ist.


Anlage

Beispiel für einen Konfliktgraph.