ACID ist ein Akronym für die vier wichtigsten Eigenschaften einer Datenbank: Atomität, Konsistenz, Isolation und Langlebigkeit. Es wird oft mit relationalen Datenbanken in Verbindung gebracht, aber eine NoSQL-Datenbank (nicht relational) kann auch ACID-Regeln befolgen. ACID-Transaktionen sind in vielen der gängigen Datenbank-Engines auf dem Markt üblich und stellen sicher, dass Lese- und Schreibvorgänge die Integrität Ihrer Daten nicht beeinträchtigen.
Was ist Datenbank-ACID?
Eine Datenbank, die die Best Practices von ACID befolgt, hat die folgenden Merkmale:
- Atomität: Verhindern Sie Datenverluste, verwaiste Datensätze und teilweise Transaktionen mit Atomität. Eine Datenbank mit Atomität bietet „alle oder nichts“-Transaktionen, sodass Sie keine Daten verlieren, wenn ein Teil einer Transaktion im mittleren Bereich ausfällt.
- Konsistenz: Tabellenbeschränkungen in ACID-Datenbanken erfordern, dass alle Transaktionen Daten in einem konsistenten Format speichern.
- Isolation: Eine ACID-Datenbank stellt sicher, dass die Transaktionen keine schmutzigen Lese- oder Schreibvorgänge zurückgeben, indem sie Daten isoliert und Transaktionen nacheinander durchführt.
- Langlebigkeit: Systemausfälle (z. B. ein Stromausfall) können Transaktionen beeinträchtigen, sodass eine ACID-Datenbank sicherstellt, dass ein Failover Datenverlust durch ein kritisches Ereignis verhindert.
Atomität
Moderne Datenbanktransaktionen haben mehr als einen Schritt, um einen Datensatz abzuschließen. Ein Kunde kann beispielsweise einen Auftrag erstellen, sodass ein gespeichertes Verfahren eine EINFÜGEN-Anweisung verwendet, um einen Datensatz zu den Tabellen „Orders“ und „products_ordered“ hinzuzufügen. Wenn das Hinzufügen eines Datensatzes zur Bestelltabelle fehlschlägt, möchten Sie der Tabelle products_ordered keinen Datensatz hinzufügen. Dadurch würde ein verwaister Datensatz erstellt werden.
Bei der Atomität führt die Datenbank alle Transaktionen zurück, wenn eine fehlschlägt, sodass die Daten konsistent bleiben und eine Beschädigung vermieden wird. Nur wenn alle Schritte einer Transaktion erfolgreich abgeschlossen sind, werden die Daten gespeichert. Atomicity vermeidet Datenbeschädigung, Datenverlust und verwaiste Datensätze.
Konsistenz
Relationale Datenbanken haben Einschränkungen, die es ermöglichen, nur bestimmte Arten von Daten zu speichern. NoSQL-Datenbanken speichern Daten in ihrem eigenen festgelegten Format. Wenn Sie beispielsweise angeben, dass nur eine Dezimalzahl in einer Spalte „Gesamtsumme der Reihenfolge“ gespeichert werden kann, führt der Versuch, eine Zeichenfolge zu speichern, zu einem Fehler. Wenn die Daten konsistent bleiben, erhalten Entwickler einen bekannten Wert, wenn sie mit einem Datensatz arbeiten.
Konsistenz in einer Datenbank bedeutet, dass Daten vorausgesagt werden können, was bedeutet, dass Sie wissen, ob Sie Daten für einen bestimmten Datensatz abrufen, um ein erwartetes Ergebnis zu erhalten. Anhand des Beispiels für die Bestelltabelle wissen Sie, dass Sie einen Dezimalwert für jede Abfrage erhalten, die einen Wert aus der Spalte „Auftragssumme“ abruft.
Isolation
Verschmutzte Lesevorgänge und schmutzige Schreibvorgänge treten auf, wenn ein Benutzer eine Abfrage zu dem bestimmten Zeitpunkt ausführt, an dem die Datenbank auch Änderungen an einem Wert vornimmt. Wenn Sie beispielsweise die Gesamtsumme für alle Aufträge für den Monat kennen möchten, erhalten Sie möglicherweise ein falsches Ergebnis, wenn Sie Daten zum Zeitpunkt der Aktualisierung einer Auftragssumme lesen. Das Gleiche kann bei Schreibaktionen geschehen, wenn Daten gelesen werden, bevor eine vorherige Aktualisierungsanweisung ausgeführt werden kann.
Verschmutzte Lese- und Schreibvorgänge können Ihre Daten beschädigen und die Datenintegrität zerstören. Isolierte Transaktionen führen nacheinander Aussagen aus, sodass die Daten auch bei Millionen täglicher Transaktionen konsistent und unterbrechungsfrei bleiben. Isolierte Transaktionen können Datensätze sperren, Änderungen vornehmen und dann Datensätze für die nächste Transaktion freigeben.
Langlebigkeit
Sowohl strukturierte als auch unstrukturierte Datenbanken müssen Daten nach Abschluss einer Transaktion konsistent und dauerhaft speichern, selbst wenn ein Systemausfall vorliegt. Transaktionsprotokolle und Infrastrukturausfälle müssen ebenfalls implementiert werden, aber die Datenbank selbst muss in der Lage sein, Daten konsistent und ohne Datenbeschädigung zu speichern. Datenbank-Engines haben ihre eigenen Strategien und Failover-Techniken, aber Administratoren müssen sich auf sie verlassen können, um Daten wiederherzustellen.
Beispielsweise kann ein Stromausfall eine Transaktion in der Mitte unterbrechen. Unabhängig davon, ob der Administrator Transaktionen zurücksetzen oder Daten wiederherstellen muss, muss die Datenbank in der Lage sein, den Fehler zu beheben. Für die meisten Administratoren wird Failover auch mit Backups und Redundanzen gehandhabt. ACID kann bei der größeren Disaster-Recovery-Strategie eines Unternehmens helfen.
Fazit
Unternehmenskritische Datenbanken benötigen ACID-Eigenschaften, um Unternehmensanwendungen zu unterstützen. ACID-Eigenschaften sind für die Datenintegrität unerlässlich und stellen sicher, dass Ihre Daten von beliebig vielen Anwendungen abgerufen und verwendet werden können. Administratoren müssen weiterhin Backups durchführen und sicherstellen, dass der Datenbankserver reibungslos funktioniert, aber ACID-Eigenschaften sind für die Geschäftskontinuität entscheidend.