Wie funktionieren ACID- und Datenbanktransaktionen?


163

Welche Beziehung besteht zwischen ACID und Datenbanktransaktion?

Gibt ACID Datenbanktransaktionen an oder ist es dasselbe?

Könnte jemand dieses Thema aufklären.

Antworten:


323

ACID ist eine Reihe von Eigenschaften, die Sie beim Ändern einer Datenbank anwenden möchten.

  • Atomizität
  • Konsistenz
  • Isolation
  • Haltbarkeit

Eine Transaktion besteht aus einer Reihe verwandter Änderungen, mit denen einige der ACID-Eigenschaften erreicht werden. Transaktionen sind Werkzeuge zum Erreichen der ACID-Eigenschaften.

Atomizität bedeutet, dass Sie garantieren können, dass die gesamte Transaktion stattfindet oder keine. Sie können komplexe Vorgänge als eine einzige Einheit ausführen, alles oder nichts, und ein Absturz, ein Stromausfall, ein Fehler oder etwas anderes ermöglicht es Ihnen nicht, sich in einem Zustand zu befinden, in dem nur einige der damit verbundenen Änderungen vorgenommen wurden.

Konsistenz bedeutet, dass Sie garantieren, dass Ihre Daten konsistent sind. Keine der Einschränkungen, die Sie für verwandte Daten haben, wird jemals verletzt.

Isolation bedeutet, dass eine Transaktion keine Daten von einer anderen Transaktion lesen kann, die noch nicht abgeschlossen ist. Wenn zwei Transaktionen gleichzeitig ausgeführt werden, sieht jede die Welt so, als würden sie nacheinander ausgeführt, und wenn eine Daten lesen muss, die von einer anderen geschrieben wurden, muss sie warten, bis die andere abgeschlossen ist.

Haltbarkeit bedeutet, dass nach Abschluss einer Transaktion garantiert wird, dass alle Änderungen auf einem dauerhaften Medium (z. B. einer Festplatte) aufgezeichnet wurden und dass die Tatsache, dass die Transaktion abgeschlossen wurde, ebenfalls aufgezeichnet wird.

Transaktionen sind also ein Mechanismus zur Gewährleistung dieser Eigenschaften. Sie sind eine Möglichkeit, verwandte Aktionen so zu gruppieren, dass eine Gruppe von Operationen insgesamt atomar sein, konsistente Ergebnisse liefern, von anderen Operationen isoliert und dauerhaft aufgezeichnet werden kann.


6
Sie sagen: "Konsistenz bedeutet, dass Sie garantieren, dass Ihre Daten konsistent sind. Keine der Einschränkungen, die Sie für verwandte Daten haben, wird jemals verletzt." Wenn mit Einschränkungen die in der Datenbank definierten gemeint sind (z. B. Einschränkungen prüfen), was hat das Transaktionsmanagement damit zu tun, dass verhindert wird, dass sie verletzt werden? Sind sie nicht immer in Kraft? Es scheint mir, dass das C in ACID eine andere Bedeutung haben muss.
Marc Rochkind

20
@MarcRochkind Mit einer Transaktion können Sie Konsistenzprüfungen anwenden, selbst wenn einzelne Vorgänge innerhalb der Transaktion die Konsistenzbeschränkungen verletzen würden. Wenn Sie beispielsweise ein Buchhaltungssystem mit doppelter Buchung aktualisieren, müssen Sie möglicherweise mehrere Konten gleichzeitig belasten und mehreren Konten gutschreiben. Ohne Transaktionen würden Sie die Einschränkungen nach jeder Anweisung überprüfen und fehlschlagen, da die einzelnen Anweisungen die Konsistenz nicht bewahren. Bei Transaktionen bleibt die gesamte Transaktion erhalten, obwohl einzelne Anweisungen die Konsistenz nicht bewahren.
Brian Campbell

1
" und wenn einer Daten lesen muss, die von einem anderen geschrieben wurden, muss er warten, bis der andere fertig ist " - ist nicht ganz richtig. Die erste Transaktion kann (und wird) diese Daten lesen und sieht den Status wie vor dem Start der zweiten Transaktion.
a_horse_with_no_name

1
@BrianCampbell 1) Konsistenz ist sowohl "Prüfbeschränkungen" wie EINZIGARTIG, AUSLÄNDISCHER SCHLÜSSEL als auch gültiger Status (gemäß der Geschäftslogik / Anforderung der Anwendung) am Ende der Transaktion? 2) Gewährleistet Atomizität und / oder Isolation nicht allein die Konsistenz? Sollten wir Konsistenz explizit als erforderliche Eigenschaft erwähnen?
user104309

1
@a_horse_with_no_name Sie sprechen von OCC (Optimistic Concurrency Control) v / s PCC (Pessimistic). Beide können in einem ACID-kompatiblen Datenbanksystem implementiert werden. Dies hängt davon ab, ob Sie Konsistenz oder hohe Verfügbarkeit anstreben.
Siddhartha

37

ACID sind wünschenswerte Eigenschaften jeder Transaktionsverarbeitungs-Engine.

Ein DBMS ist (wenn es gut ist) eine bestimmte Art von Transaktionsverarbeitungs-Engine, die diese Eigenschaften normalerweise in sehr großem Umfang, aber nicht ganz vollständig verfügbar macht.

Es gibt jedoch auch andere Engines, die diese Eigenschaften offenlegen können. Die Art von Software, die früher als "TP-Monitore" bezeichnet wurde, ist ein typisches Beispiel (heutzutage sind es hauptsächlich Webserver).

Solche TP-Monitore können auf andere Ressourcen als ein DBMS (z. B. einen Drucker) zugreifen und ihren Benutzern dennoch ACID garantieren. Als Beispiel dafür, was ACID bedeuten kann, wenn ein Drucker an einer Transaktion beteiligt ist:

  • Atomarität: Ein ganzes Dokument wird gedruckt oder gar nichts
  • Konsistenz: Am Ende der Transaktion befindet sich der Papiereinzug oben auf der Seite
  • Isolation: Beim Drucken werden keine zwei Dokumente verwechselt
  • Haltbarkeit: Der Drucker kann garantieren, dass nicht mit leeren Patronen "gedruckt" wurde.

3
großartige prägnante Druckerbeispiele.
Seen sind

2
Gutes Beispiel. Ich verstehe den Teil "Konsistenz" jedoch nicht. In meinen Augen ist ein besseres Beispiel "Der Drucker akzeptiert kein Papier, das größer als 10 Zoll ist."
Skeller88

BEARBEITEN - "Papier breiter als 10 Zoll."
Skeller88

1
Ich gebe zu, dass man ein bisschen weit weg ist. Es ist jedoch schwierig, bessere Beispiele zu finden, da es bei "Konsistenz" um Daten geht und ein Drucker nicht gerade ein Datengerät ist.
Erwin Smout

1
Dann verfügt der Drucker über eine Funktion, die verhindert, dass mit dem Drucken begonnen wird, wenn die Seitenzahl eines Dokuments höher ist als die Blattanzahl, von der derzeit bekannt ist, dass sie im Papiervorrat enthalten ist. Sie sehen, das ist das Problem mit vielen Leuten, die hier kommentieren. Sie erwähnen "Drucker" und sie sehen nur das blöde serielle Streaming-Gerät, das sie auf ihrem Schreibtisch haben, nicht das hochwertige professionelle Gerät, das ihr gesamtes Wohnzimmer ausfüllt (und das oft die von mir erwähnten Funktionen hat).
Erwin Smout

21

Ich habe das Druckerbeispiel leicht modifiziert, um es erklärbarer zu machen

1 Dokument mit 2 Seiten Inhalt wurde an den Drucker gesendet

Transaktion - Dokument an Drucker gesendet

  • Atomizität - Der Drucker druckt 2 Seiten eines Dokuments oder keine
  • Konsistenz - Der Drucker druckt eine halbe Seite und die Seite bleibt hängen. Der Drucker startet sich selbst neu und druckt 2 Seiten mit sämtlichem Inhalt
  • Isolation - Während zu viele Ausdrucke ausgeführt wurden, druckt der Drucker den richtigen Inhalt des Dokuments
  • Haltbarkeit - Während des Druckvorgangs gab es einen Stromausfalldrucker, der erneut fehlerfrei Dokumente druckt

Ich hoffe, dies hilft jemandem, das Konzept von ACID in den Griff zu bekommen


Ich bin mir nicht sicher, was "während zu viele Ausdrucke im Gange waren" bedeutet - es ist nur "mehrfach" und nicht "zu viele"?
icc97

17

Welche Beziehung besteht zwischen ACID und Datenbanktransaktion?

In einer relationalen Datenbank muss jede SQL-Anweisung im Rahmen einer Transaktion ausgeführt werden.

Ohne die Transaktionsgrenzen explizit zu definieren, verwendet die Datenbank eine implizite Transaktion, die jede einzelne Anweisung umschließt.

Die implizite Transaktion beginnt vor der Ausführung der Anweisung und endet (Commit oder Rollback) nach der Ausführung der Anweisung. Der implizite Transaktionsmodus wird allgemein als Autocommit bezeichnet.

Wie in diesem Artikel erläutert , ist eine Transaktion eine Sammlung von Lese- / Schreibvorgängen, die nur dann erfolgreich sind, wenn alle enthaltenen Vorgänge erfolgreich sind.

Atomizität

Inhärent ist eine Transaktion durch vier Eigenschaften gekennzeichnet (üblicherweise als ACID bezeichnet):

  • Atomizität
  • Konsistenz
  • Isolation
  • Haltbarkeit

Gibt ACID Datenbanktransaktionen an oder ist es dasselbe?

Für ein relationales Datenbanksystem gilt dies, da der SQL-Standard angibt, dass eine Transaktion die ACID-Garantien bereitstellen soll:

Atomizität

Atomicity nimmt einzelne Operationen und verwandelt sie in eine Alles-oder-Nichts-Arbeitseinheit, die genau dann erfolgreich ist, wenn alle enthaltenen Operationen erfolgreich sind.

Eine Transaktion kann eine Statusänderung enthalten (es sei denn, es handelt sich um eine schreibgeschützte Transaktion). Eine Transaktion muss das System immer in einem konsistenten Zustand belassen, unabhängig davon, wie viele gleichzeitige Transaktionen zu einem bestimmten Zeitpunkt verschachtelt sind.

Konsistenz

Konsistenz bedeutet, dass Einschränkungen für jede festgeschriebene Transaktion erzwungen werden. Dies bedeutet, dass alle Schlüssel, Datentypen, Überprüfungen und Auslöser erfolgreich sind und keine Einschränkungsverletzung ausgelöst wird.

Isolation

Transaktionen erfordern Mechanismen zur Kontrolle der Parallelität und garantieren die Richtigkeit, auch wenn sie verschachtelt sind. Isolation bringt uns den Vorteil, nicht festgeschriebene Statusänderungen vor der Außenwelt zu verbergen, da fehlgeschlagene Transaktionen niemals den Status des Systems beschädigen sollten. Die Isolierung wird durch Parallelitätskontrolle unter Verwendung pessimistischer oder optimistischer Sperrmechanismen erreicht.

Haltbarkeit

Eine erfolgreiche Transaktion muss den Status eines Systems dauerhaft ändern. Vor dem Beenden werden die Statusänderungen in einem dauerhaften Transaktionsprotokoll aufgezeichnet. Wenn unser System plötzlich von einem Systemabsturz oder einem Stromausfall betroffen ist, werden möglicherweise alle nicht abgeschlossenen festgeschriebenen Transaktionen wiedergegeben.

Geben Sie hier die Bildbeschreibung ein

Weitere Informationen zur Haltbarkeit und zum Redo-Protokoll finden Sie in diesem Artikel .


Für "Konsistenz" - ich sehe an vielen Stellen "anwendungsspezifische logische Korrektheit" als Erklärung. Angenommen, wenn dies der Fall ist, kann DB die App-Logik nicht kennen. "Konsistenz" kann also keine inhärente Eigenschaft einer Datenbank sein. Ist es nicht ausreichend, dass die App ihre Korrektheit (oder "Konsistenz") implementiert, um Atomizität und Isolation zu implementieren?
user104309

Lass mich mal sehen. Aber vorher brauche ich eine grundlegende Klarstellung. Brain Campbells Kommentar in der akzeptierten Antwort "Bei Transaktionen, obwohl einzelne Aussagen die Konsistenz nicht bewahren, tut dies die Transaktion als Ganzes". Wie ist es möglich ? Und wie hängen mehrere Belastungen und Gutschriften mit der Konsistenz zusammen?
user104309

12

ACID-Eigenschaften sind ein sehr altes und wichtiges Konzept der Datenbanktheorie. Ich weiß, dass Sie viele Beiträge zu diesem Thema finden können, aber ich möchte trotzdem eine Antwort zu diesem Thema teilen, da dies ein sehr wichtiges Thema von RDBMS ist.

Das Datenbanksystem spielt mit vielen verschiedenen Arten von Transaktionen, bei denen alle Transaktionen bestimmte Merkmale aufweisen. Diese Eigenschaft ist als ACID-Eigenschaften bekannt. ACID-Eigenschaften erhalten einen Berechtigten für alle Datenbanktransaktionen, um alle Aufgaben auszuführen.

Atomizität: Entweder alles oder nichts begehen.

Konsistenz: Machen Sie konsistente Aufzeichnungen in Bezug auf die Validierung aller Regeln und Einschränkungen der Transaktion.

Isolation: Stellen Sie sicher, dass sich zwei Transaktionen nicht bewusst sind.

Haltbarkeit: Festgeschriebene Daten werden für immer gespeichert. Referenz aus diesem Artikel:


5

Um Wikipedia zu zitieren :

ACID (Atomizität, Konsistenz, Isolation, Haltbarkeit) ist eine Reihe von Eigenschaften, die gewährleisten, dass Datenbanktransaktionen zuverlässig verarbeitet werden.

Ein DBMS, das Transaktionen unterstützt, bemüht sich, alle diese Eigenschaften zu unterstützen - jedes kommerzielle DBMS (sowie mehrere Open-Source-DBMS) bieten vollständige ACID-Unterstützung - obwohl dies häufig möglich ist (z. B. mit unterschiedlichen Isolationsstufen in MSSQL) Verringern Sie die SÄURE - und verlieren Sie so die Garantie für ein vollständiges Transaktionsverhalten.


3

[Gray] führte 1981 die ACD-Eigenschaften für eine Transaktion ein. 1983 fügte [Haerder] die Isolation-Eigenschaft hinzu. Meiner Meinung nach hätten die ACD-Eigenschaften einen nützlicheren Satz von Eigenschaften zu diskutieren. Eine Interpretation von Atomicity (dass die Transaktion jederzeit von jedem Client aus gesehen atomar sein sollte) würde tatsächlich die Isolationseigenschaft implizieren. Die Eigenschaft "Isolation" ist nützlich, wenn die Transaktion nicht isoliert ist. wenn die Isolationseigenschaft entspannt ist. In ANSI SQL sprechen: Wenn die Isolationsstufe schwächer ist, dann SERIALIZABLE. Wenn die Isolationsstufe jedoch SERIALIZABLE ist, ist die Isolationseigenschaft nicht wirklich von Interesse.

Ich habe mehr darüber in einem Blog-Beitrag geschrieben: "ACID macht keinen Sinn".

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] Das Transaktionskonzept, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Prinzipien der transaktionsorientierten Datenbankwiederherstellung, Haerder und Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

Transaktion kann als Sammlung von Aufgaben definiert werden, die als minimale Verarbeitungseinheit betrachtet werden. Jede minimale Verarbeitungseinheit kann nicht weiter unterteilt werden.

Alle Transaktionen müssen vier Eigenschaften enthalten, die allgemein als ACID-Eigenschaften bezeichnet werden. dh ACID ist die Gruppe von Eigenschaften einer Transaktion.

  • Atomarität:
  • Konsistenz
  • Isolation
  • Haltbarkeit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.