INTERNET WORLD Business




Nicht nur Banken, auch Datenbanken müssen Transaktionen sicher abwickeln

Sichere Transaktionen

Der Begriff "Transaktion" ist vor allem aus der Wirtschaft gut bekannt. Im Kontext von Datenbanken handelt es sich dabei jedoch um eine Reihe von Operationen, die einige Bedingungen erfüllen müssen. Angenommen, Sie entwickeln die Software für einen Geldautomaten, so wird folgender Ablauf programmiert:

1. Benutzer gibt Betrag an

2. Aktuellen Kontostand vom Server laden

3. Wenn der aktueller Kontostand größer oder gleich dem gewünschten Betrag ist, dann zu 4. springen, ansonsten zu 5.

4. Kontostand verringern, Geld auszahlen

5. Auszahlung verweigern

Normalerweise werden diese Schritte im Erfolgsfall in der Reihenfolge 1, 2, 3, 4 ausgeführt. Problematisch wird es aber, wenn ein Benutzer zwei Karten besitzt und zwei Geldautomaten ungefähr gleichzeitig bedient. Dann kann es sein, dass die Schritte in der folgenden Reihenfolge zur Ausführung kommen (a steht für den ersten Geldautomaten, b den zweiten): 1a, 1b, 2a, 2b, 3b, 3a, 4b, 4a.

Geldautomat zwei war also etwas schneller. In beiden Geräten wird der Kontostand ermittelt (Schritte 2a, 2b). Die Abhebungen erfolgen jeweils nach dieser Ermittlung. Sprich: Beträgt das Guthaben 800 Euro, könnte der Benutzer so zweimal 500 Euro abheben, denn beide Geldautomaten gehen davon aus, dass noch 800 Euro auf dem Konto sind.

Es ist offensichtlich, wo hier das Problem liegt: Zwischen der Ermittlung des Kontostands (Schritt 2) und der Auszahlung darf nicht auf das Konto des Benutzers zugegriffen werden. Erst wenn der neue Kontostand gespeichert wurde, darf das Konto wieder freigegeben werden. Das lässt sich mit so genannten Transaktionen lösen. Eine Transaktion umfasst mehrere Einzelschritte, die jedoch als Ganzes gesehen werden.

In der Informatik gilt für Transaktionen das ACID-Prinzip: Dieses Akronym steht für vier Bedingungen, die jedes Transaktionssystem erfüllen muss:

A wie Atomicity (Atomarität): Die Transaktion ist nicht teilbar, wird also komplett ausgeführt oder überhaupt nicht. Eine teilweise durchgeführte Transaktion (etwa: Geld vom Konto abgebucht, aber nicht ausgezahlt) darf es nicht geben.

C wie Consistency (Konsistenz): Vor und nach einer Transaktion ist der Datenbestand noch konsistent; beispielsweise dürfen keine referenziellen Integritäten verletzt werden (s. IWB 04/2006).

I wie Isolation: Transaktionen laufen isoliert ab, sind also unabhängig von anderen ablaufenden Prozessen. Um beim Beispiel zu bleiben: Ein Geldautomat darf dem anderen Geldautomaten nicht "dazwischenfunken".

D wie Durability (Dauerhaftigkeit): Das Ergebnis einer Transaktion ist dauerhaft, verbleibt also auch im Datenbestand.

Wenn ein Transaktionssystem eine Transaktion ausführt, wird zunächst die Transaktion an sich gestartet; dann folgen die Operationen, die nacheinander ausgeführt werden sollen. Am Ende einer Transaktion gibt es zwei Möglichkeiten: Commit oder Rollback. Während Commit die Transaktion ausführt, also alle Operationen unter Berücksichtigung von ACID durchführt, stellt Rollback den Ursprungszustand wieder her. Der letzte Punkt ist sehr wichtig: Geht in einer Transaktion etwas schief, müssen alle Operationen rückgängig gemacht werden, siehe Buchstabe A in ACID.

Je komplexer die Transaktion, desto schwieriger ist es für ein System, die parallele Ausführung zu ermöglichen. Doch darin liegt eben der Vorteil eines solchen Systems, denn gerade bei umfangreichen Transaktionen dauert es einfach zu lange, die einzelnen Transaktionen hintereinander auszuführen. Beim Geldautomaten-Beispiel heißt das: Es wäre unschön, wenn Geldautomat 2 die Kontokarte des Benutzers ausspuckt, bloß weil auf Geldautomat 1 just dasselbe Konto abgefragt wird.

Christian Wenz

comments powered by Disqus