Freigeben über


Serialisierbarkeit

Im Idealfall sollten Transaktionen serialisierbar sein. Transaktionen werden als serialisierbar bezeichnet, wenn die Ergebnisse der gleichzeitigen Ausführung von Transaktionen mit den Ergebnissen der seriellen Ausführung identisch sind – d. h. nacheinander. Es ist nicht wichtig, welche Transaktion zuerst ausgeführt wird, nur dass das Ergebnis keine Vermischung der Transaktionen widerspiegelt.

Angenommen, Transaktion A multipliziert Datenwerte mit 2, und Transaktion B addiert 1 zu Datenwerten. Angenommen, es gibt zwei Datenwerte: 0 und 10. Wenn diese Transaktionen nacheinander ausgeführt werden, sind die neuen Werte 1 und 21, wenn transaktion A zuerst ausgeführt wird, oder 2 und 22, wenn Transaktion B zuerst ausgeführt wird. Aber was geschieht, wenn die Reihenfolge, in der die beiden Transaktionen ausgeführt werden, für jeden Wert unterschiedlich ist? Wenn transaktion A zuerst für den ersten Wert ausgeführt wird und die Transaktion B zuerst für den zweiten Wert ausgeführt wird, sind die neuen Werte 1 und 22. Wenn diese Reihenfolge umgekehrt wird, sind die neuen Werte 2 und 21. Die Transaktionen können serialisiert werden, wenn 1, 21 und 2, 22 die einzigen möglichen Ergebnisse sind. Die Transaktionen können nicht serialisiert werden, wenn 1, 22 oder 2, 21 ein mögliches Ergebnis ist.

Warum ist serialisierbarkeit also wünschenswert? Mit anderen Worten, warum ist es wichtig, dass eine Transaktion abgeschlossen ist, bevor die nächste Transaktion beginnt? Berücksichtigen Sie das folgende Problem. Ein Verkäufer gibt Aufträge gleichzeitig ein, wenn ein Angestellter Rechnungen sendet. Angenommen, der Verkäufer gibt eine Bestellung von Company X ein, übernimmt ihn aber nicht; der Verkäufer spricht noch immer mit dem Vertreter von Company X. Der Mitarbeiter fordert eine Liste aller offenen Aufträge an und ermittelt den Auftrag für Company X und sendet ihnen eine Rechnung. Nun entscheidet der Vertreter von Company X, dass er seine Bestellung ändern möchte, sodass der Verkäufer ihn ändert, bevor er die Transaktion übernimmt. Firma X erhält eine falsche Rechnung.

Wenn die Transaktionen des Verkäufers und des Angestellten serialisierbar wären, wäre dieses Problem nie aufgetreten. Entweder hätte die Transaktion des Verkäufers vor Beginn der Transaktion des Verkäufers abgeschlossen sein müssen, in diesem Fall hätte der Mitarbeiter die richtige Rechnung gesendet, oder die Transaktion des Verkäufers hätte abgeschlossen, bevor die Transaktion des Verkäufers begonnen hätte, in diesem Fall hätte der Angestellte überhaupt keine Rechnung an Company X gesendet.