Haftpflicht Blogger
Virtual Server von Host Europe

ACID-Transaction

| 19. September 2014 | Keine Kommentare

Transaction

In diesem Blogbeitrag möchte ich etwas zur Begriffsklärung und dem Verständnis des Begriffs „ACID-Transaction“ beitragen. Um eine Transaction zu einer ACID-Transaction zu machen, gehört noch mehr, als das „Alles oder nichts Prinzip“. Oft erwähntes Beispiel:

Die Geldabbuchung von Konto A muss immer mit einer Geldeinbuchung auf Konto B verbunden sein.

Definition von Transaction

  • Eine Transaction ist eine Gruppe von Operationen, die als Einheit (Unit) angesehen werden. Entweder waren alle Operationen erfolgreich oder nicht “Atomicity”.

Eine ACID-Transaction erfüllt neben dem Kriterium “Atomicity” auch noch weitere Kritierien.

  • Atomicity: Entweder waren alle Operationen der Transaction erfolgreich oder keines. Der Erfolg der ganzen Transaction hängt von jeder einzelnen Operation ab.
  • Consistency: Am Ende der Transaction ist die Datenbank in einem konsistenten Zustand. Eine Transaction kann zwar erfolgreich sein, aber z.B.  wurden in der Transaction Löschungen/Veränderungen in (abhängigen) Tabellen nicht vorgenommen. Dann hinterläßt die erfolgreiche Transaction die Datenbank in einem inkonsistenten Zustand, d.h. es war keine Transaction, die das Consistency-Kriterium erfüllt und damit zwar eine erfolgreiche Transaction, aber eben keine ACID-Transaction.
  • Isolation: Alle Änderungen, die im Laufe der Transaction gemacht werden, sind zunächst nur für die Operationen innerhalb der Transaction sichtbar. Erst bei einem Commit sind diese Datenbankveränderungen auch für andere Transactionen sichtbar.
  • Durability: Nach dem Ende der Transaction sind die Veränderungen fortdauernd.

Trugschluss:  Der Unittest war erfolgreich!

Warum sollte man darauf achten, dass eine Transaction eine ACID Transaction ist?

Die Bündelung von mehreren Operationen in einer Transaction hat ja den Hintergrund, dass man ein fehlerfreies Programm erstellen möchte.Transaktionen kann man in jeder Programmiersprache (Java, PHP, C++, …) erstellen. Dann wird ein Unit-Test erstellt und dieser läuft erfolgreich durch. Also ist das Programm doch fehlerfrei.

Nein, eben nicht.  Was man mit seinem Unit-Test geprüft hat, mag erfolgreich gewesen sein, aber solange es keine ACID-Transaction war, hat das Programm eine Schwachstelle, die zur Dateninkonsistenz führen kann.

Bei einem Code-Qualitätscheck sollte eine Nicht ACID-Transaction als zu überarbeiten, angestrichen werden.

Siehe auch: [1]  Buch bei Amazon: Pro JPA 2, Apress Verlag, Seite 54, Transaction Review

Stichworte: , ,

Kategorie: Java, SQL

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.