Historie (Transaction Schedule)
Eine Historie ist eine sequenzielle Anordnung aller Aktionen (read, write, commit, abort) von einer oder mehreren Transaktionen. Sie enthält alle Aktionen jeder beteiligten Transaktion, wobei die Reihenfolge innerhalb einer Transaktion erhalten bleibt. Aktionen verschiedener Transaktionen können verzahnt (interleaved) sein.
Merke: Historie = Reihenfolge aller Operationen aller Transaktionen, verzahnt aber intern konsistent.
Serielle Historie
Transaktionen werden strikt hintereinander ausgeführt: erst T1 komplett, dann T2, dann T3. Keine Verzahnung. Immer korrekt, aber schlecht für die Performance. Seriell dient als Referenzmodell für die Korrektheit paralleler Ausführungen.
Merke: Seriell = Transaktionen laufen sequentiell hintereinander, nie verzahnt.
Serialisierbare Historie
Eine Historie H ist serialisierbar, wenn sie zu einer seriellen Historie äquivalent ist, also das gleiche Endergebnis in der Datenbank liefert. Ziel des DBMS: verzahnte Ausführung erlauben, aber nur wenn Serialisierbarkeit gewährleistet ist. Korrekt = serialisierbar.
Merke: Verzahnt darf sein, solange das Ergebnis wie bei serieller Ausführung ist.
Konflikt zwischen Operationen
Zwei Operationen stehen in Konflikt, wenn sie dasselbe Datenobjekt betreffen UND mindestens eine ein write ist. Konfliktarten: r/w, w/r, w/w. read/read ist KEIN Konflikt. Das write allein macht den Konflikt aus.
Merke: Gleiches Objekt + mindestens ein write. r/r ist harmlos.
Konfliktäquivalenz
Zwei Historien sind konfliktäquivalent, wenn sie die Konfliktoperationen der nicht-abgebrochenen Transaktionen in derselben Reihenfolge ausführen. Nicht-konfligierende Operationen dürfen umsortiert werden.
Merke: Gleiche Reihenfolge aller Konfliktpaare, egal wie der Rest sortiert ist.
Konflikt-Serialisierbarkeit
Eine Historie H ist konfliktserialisierbar, wenn sie konfliktäquivalent zu einer seriellen Historie ist. Man kann die verzahnte Historie durch Vertauschen unabhängiger Operationen in eine serielle Form überführen. Strenger als Ergebnis-Äquivalenz, aber effizient testbar.
Merke: Konflikte in seriell umsortierbar ohne Reihenfolgeverletzung.
Präzedenzgraph SG(H)
Gerichteter Graph. Knoten sind die Transaktionen T1, ..., Tn. Für jedes Konfliktpaar p_i(X) vor q_j(X) mit i != j wird eine Kante T_i -> T_j eingezeichnet. Verdichtet die Konfliktbeziehung auf Transaktionsebene.
Merke: Knoten pro Transaktion, Kante T_i->T_j bei Konflikt von T_i vor T_j.
Serialisierbarkeitstheorem
Eine Historie H ist konfliktserialisierbar genau dann, wenn ihr Serialisierbarkeitsgraph SG(H) azyklisch ist. Ein Zyklus bedeutet widersprüchliche Reihenfolgeanforderungen. Topologische Sortierung des azyklischen Graphen liefert die äquivalente serielle Reihenfolge.
Merke: Azyklisch = serialisierbar. Zyklus = nicht serialisierbar.