Heim  >  Artikel  >  Java  >  Eine ausführliche Einführung in die grundlegenden Java-Transaktionen

Eine ausführliche Einführung in die grundlegenden Java-Transaktionen

黄舟
黄舟Original
2017-03-16 10:22:301016Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Einführung von Java-Basistransaktionen vorgestellt. Freunde, die diese benötigen, können sich auf

Ausführliche Erklärung von Java-Transaktionen

1 , Was ist eine Transaktion

Eine Transaktion ist eine Abfolge von Vorgängen für den Zugriff auf die Datenbank. Das Datenbankanwendungssystem vervollständigt den Zugriff auf die Datenbank über Transaktionssätze. Die korrekte Ausführung einer Transaktion führt dazu, dass die Datenbank von einem

Zustand in einen anderen übergeht.

Transaktionen müssen den von ISO/IEC festgelegten ACID-Grundsätzen entsprechen. ACID ist die Abkürzung für Atomizität, Konsistenz, Isolation und Haltbarkeit. Transaktionen müssen den von ISO/IEC festgelegten ACID-Prinzipien entsprechen. ACID ist die Abkürzung für Atomizität, Konsistenz, Isolation und Haltbarkeit.

Atomar. Das heißt, Unteilbarkeit, entweder werden alle Transaktionen ausgeführt oder keine. Wenn alle Untertransaktionen der Transaktion erfolgreich übermittelt wurden, werden alle Datenbankoperationen übermittelt, und wenn eine Untertransaktion fehlschlägt, werden die Datenbankoperationen anderer Untertransaktionen zurückgesetzt. Das heißt, die Datenbank kehrt in den Zustand vor der Transaktionsausführung zurück, es findet kein Zustandsübergang statt.

Konsistenz bzw. Stringability. Die Ausführung einer Transaktion wandelt die Datenbank von einem korrekten Zustand in einen anderen um. Isolation. Bevor die Transaktion korrekt festgeschrieben wurde, dürfen durch die Transaktion vorgenommene Änderungen an den Daten keiner anderen Transaktion zur Verfügung gestellt werden. Das heißt, bis die Transaktion korrekt festgeschrieben wurde, sollten ihre möglichen Ergebnisse keiner anderen Transaktion angezeigt werden.

Beharrlichkeit. Nachdem eine Transaktion korrekt übermittelt wurde, werden ihre Ergebnisse dauerhaft in der Datenbank gespeichert. Auch wenn nach der Übermittlung der Transaktion weitere Fehler auftreten, werden die Verarbeitungsergebnisse der Transaktion gespeichert.

Beim Ausführen einer eingebetteten SQL-Anwendung oder eines eingebetteten SQL-Skripts wird die Transaktion automatisch gestartet, wenn die ausführbare SQL-Anweisung zum ersten Mal ausgeführt wird (nachdem die Verbindung zur Datenbank hergestellt oder nachdem die bestehende Transaktion beendet wurde). Nach dem Starten einer Transaktion muss diese vom Benutzer oder der Anwendung, die die Transaktion gestartet hat, explizit beendet werden, es sei denn, es wird ein Prozess namens „Automatisches Festschreiben“ verwendet (in diesem Fall wird jede einzelne ausgegebene SQL-Anweisung angezeigt). ausgeführt wird).

In den meisten Fällen wird eine Transaktion durch die Ausführung einer COMMIT- oder ROLLBACK-Anweisung beendet. Wenn die COMMIT-Anweisung ausgeführt wird, werden alle seit dem Start der Transaktion an der Datenbank vorgenommenen Änderungen dauerhaft, d. h. sie werden auf die Festplatte geschrieben. Wenn die ROLLBACK-Anweisung ausgeführt wird, werden alle seit dem Start der Transaktion an der Datenbank vorgenommenen Änderungen rückgängig gemacht und die Datenbank wird in den Zustand zurückversetzt, in dem sie sich vor Beginn der Transaktion befand. In beiden Fällen wird garantiert, dass die Datenbank nach Abschluss der Transaktion in einen konsistenten Zustand zurückkehrt.

Es ist wichtig zu beachten, dass Transaktionen zwar eine allgemeine Datenbankkonsistenz gewährleisten, indem sie sicherstellen, dass Datenänderungen erst nach erfolgreichem Commit der Transaktion dauerhaft werden, der Benutzer oder die Anwendung jedoch dennoch die Reihenfolge der darin ausgeführten SQL-Operationen sicherstellen muss Jede Transaktion führt immer zu einer konsistenten Datenbasis.

2. Das Datenbanksystem unterstützt zwei Transaktionsmodi :

Auto-Commit-Modus: Jede SQL-Anweisung ist eine unabhängige Transaktion nach der Datenbank Wenn das System eine SQL-Anweisung ausführt, wird die Transaktion automatisch übermittelt.

Manueller Commit-Modus: Die Start- und Endgrenze der Transaktion muss explizit vom Datenbank-Client-Programm angegeben werden.

Hinweis: Datenbanktabellen in

MySQL sind in drei Typen unterteilt: INNODB, BDB und MyISAM, wobei MyISAM keine Datenbanktransaktionen unterstützt. Die Anweisung zum Erstellen einer Tabelle in MySQL verwendet standardmäßig den Typ MyISAM.

3. Wenn mehrere Transaktionen gleichzeitig auf dieselben Daten in der Datenbank zugreifen und der erforderliche Isolationsmechanismus nicht übernommen wird, können verschiedene Parallelitätsprobleme auftreten Es gibt mehrere Kategorien:

  • Die erste Art von Verlust

    Aktualisierung: Wenn eine Transaktion widerrufen wird, werden die von anderen Transaktionen übermittelten aktualisierten Daten überschrieben.

  • Dirty Read: Eine Transaktion liest aktualisierte Daten, die von einer anderen Transaktion übermittelt wurden.

  • Dummy-Lesen: Eine Transaktion liest neu eingefügte Daten, die von einer anderen Transaktion übermittelt wurden.

  • Nicht wiederholbares Lesen: Eine Transaktion liest aktualisierte Daten, die von einer anderen Transaktion übermittelt wurden.

  • Die zweite Art der verlorenen Aktualisierung: Dies ist ein Sonderfall des nicht wiederholbaren Lesens, bei dem eine Transaktion die aktualisierten Daten überschreibt, die von einer anderen Transaktion übermittelt wurden.


4. Isolationsstufe

Wenn das Datenbanksystem die festgeschriebene Isolationsstufe übernimmt, führt dies zum zweiten Typ von Nicht wiederholbares Lesen Das Parallelitätsproblem verlorener Aktualisierungen kann durch die Verwendung pessimistischer oder optimistischer Sperren in der Anwendung vermieden werden. Aus Anwendungssicht lassen sich Sperren in folgende Kategorien einteilen:

  1. Serialisierbar: Eine Transaktion kann die von anderen Transaktionen während der Ausführung an der Datenbank vorgenommenen Aktualisierungen nicht sehen.

  2. Wiederholbares Lesen: Während der Ausführung einer Transaktion können Sie neu eingefügte Datensätze sehen, die von anderen Transaktionen übermittelt wurden, aber Sie können keine Änderungen an vorhandenen Datensätzen durch die Erneuerung anderer Transaktionen sehen.

  3. Festgeschrieben lesen (festgeschriebene Daten lesen): Während der Ausführung einer Transaktion können Sie die neu eingefügten Datensätze sehen, die von anderen Transaktionen festgeschrieben wurden, und Sie können auch die Paare sehen, die festgeschrieben wurden wurden von anderen Transaktionen festgeschrieben

  4. Nicht festgeschriebene Daten lesen: Während der Ausführung kann eine Transaktion neu eingefügte Datensätze kopieren, die nicht von anderen Transaktionen festgeschrieben wurden. und kann andere Transaktionen sehen. Es gibt keine festgeschriebenen Aktualisierungen vorhandener Datensätze.

Je höher die Isolationsstufe, desto vollständiger und konsistenter können die Daten garantiert werden, aber desto größer ist auch die Auswirkung auf die Parallelitätsleistung. Bei den meisten Anwendungen können Sie der Isolationsstufe des Datenbanksystems Priorität auf „Read Commited“ geben, wodurch Dirty Reads vermieden werden können und eine bessere Parallelitätsleistung erzielt wird. Obwohl dies zu Parallelitätsproblemen wie nicht wiederholbaren Lesevorgängen, virtuellen Lesevorgängen und verlorenen Aktualisierungen zweiten Typs führt, können solche Probleme in einzelnen Situationen, in denen solche Probleme auftreten können, von der Anwendung mithilfe pessimistischer Sperren oder optimistischer Sperren gesteuert werden.

Wenn das Datenbanksystem die Leseisolationsstufe „Commited“ verwendet, führt dies zu nicht wiederholbaren Lesevorgängen und der zweiten Art von Problemen mit der Parallelität verlorener Updates. Sie können pessimistische Sperren oder optimistische Sperren in der Anwendung verwenden, um solche Probleme zu vermeiden . Aus Sicht der Anwendung können Sperren in die folgenden Kategorien unterteilt werden:

 A. Pessimistische Sperre: bezieht sich auf die Sperrung von in der Anwendung angezeigten Datenressourcen. Obwohl es Parallelitätsprobleme wie verlorene Aktualisierungen und nicht wiederholbare Lesevorgänge verhindert, beeinträchtigt es die Parallelitätsleistung und sollte mit Vorsicht verwendet werden.

 B. Optimistisches Sperren: Optimistisches Sperren geht davon aus, dass, wenn die aktuelle -Transaktion die -Datenressource betreibt, keine anderen Transaktionen gleichzeitig auf die Datenressource zugreifen Es ist vollständig auf die Isolation der Datenbankebenen angewiesen, um Sperren automatisch zu verwalten. Anwendungen nutzen die Versionskontrolle, um mögliche Parallelitätsprobleme zu vermeiden.

5. Es gibt zwei Möglichkeiten, pessimistische Sperren zu implementieren.

A. Im Anwendungsprogramm anzeigen und die ausschließliche Verwendung des Datenbanksystems zum Sperren von Datenressourcen festlegen. SQL-Anweisung: Wählen Sie... füraktuellesDatum aus, verwenden Sie beim Laden get im Ruhezustand, z. B. session.get(Account .class,new Long(1),LockMode,UPGRADE)

 B. Fügen Sie ein LOCK-Feld hinzu, das den Datensatzstatus in der Datenbanktabelle angibt, wenn es den Wert „Y“ annimmt. Zeigt an, dass der Datensatz durch eine Transaktion gesperrt wurde. Wenn er „N“ ist, bedeutet dies, dass der Datensatz inaktiv ist und die Transaktion darauf zugreifen kann. Dies kann durch Hinzufügen eines Sperr-Tag-Felds erreicht werden.

Nutzen Sie die Hibernate-Versionskontrolle, um optimistisches Sperren zu implementieren.

Optimistisches Sperren ist ein vom Programm bereitgestellter Mechanismus. Dieser Mechanismus kann nicht nur sicherstellen, dass mehrere Transaktionen gleichzeitig auf Daten zugreifen, sondern auch verhindern, dass die zweite Klasse fehlt Update-Problem.

In der Anwendung können Sie die von Hibernate bereitgestellte Versionskontrollfunktion verwenden, um das Element <time in der OR-Zuordnungsdatei anzuzeigen Versionskontrolle. Es wird generell empfohlen,

zu verwenden

Das obige ist der detaillierte Inhalt vonEine ausführliche Einführung in die grundlegenden Java-Transaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn