Heim >Datenbank >MySQL-Tutorial >Beispiele für Transaktionen und Parallelitätsprobleme in Datenbanken
Diskussion über Transaktionen und Parallelitätsprobleme in Datenbanken
Kürzlich hat ein Kollege einen Code geschrieben, der für die Logik der Auftragserstellung verantwortlich ist festgestellt, dass es möglicherweise Probleme mit der Parallelität gibt. Mein Kollege war anderer Meinung. Er dachte, dass seine Logik in der gespeicherten Prozedur geschrieben sei und es kein Problem geben sollte.
Die Logik des Codes ist ungefähr (Pseudocode):
begin transaction if 查询到客户存在进行中的订单 rollback transaction if 查询到设备存在进行中的订单 rollback transaction 插入订单 commit transaction
Im Folgenden wird diese Logik analysiert und erläutert, warum diese Transaktion Parallelitätsprobleme haben wird.
Stellen Sie zunächst zwei Fragen, besprechen Sie dann die mit der Transaktion verbundenen Wissenspunkte mit den Fragen und lösen Sie schließlich diese beiden Fragen und beantworten Sie die vorherigen Fragen.
Die erste Frage: Können Transaktionen gleichzeitig sein?
Die zweite Frage: Wie isoliert die Datenbank Transaktionen?
Die Ausführung von Transaktionen in der Datenbank umfasst viele Aspekte, darunter den Umgang mit kritischen Ressourcen, das Sperren und Entsperren usw. Unabhängig davon, wie die Transaktion ausgeführt wird, müssen jedoch die folgenden Eigenschaften gewährleistet sein:
Atomizität
Konsistenz
Isolation
Persistenz
Atomizität: Alle Vorgänge sind eine logische Einheit, entweder erfolgreich übermittelt oder fehlgeschlagen; Konsistenz: Es werden nur zulässige Daten in die Datenbank geschrieben, andernfalls wird die Transaktion auf den ursprünglichen Zustand zurückgesetzt.
Isolierung: Mehrere Transaktionen dürfen gleichzeitig ausgeführt werden, ohne dass die Richtigkeit der Datenstabilität und -integrität beeinträchtigt wird ;
Persistenz: Nach Abschluss der Transaktion werden die übermittelten Ergebnisse verfestigt und gespeichert.
Verschiedene Datenbanksperren
Beantworten Sie die vorherige Frage
Die Antwort lautet: Ja, um die Leistung zu verbessern, erlaubt die Datenbank mehrere gleichzeitige Transaktionen
Transaktionsvorgang, diese Transaktion hat nichts mit der Initiierungsmethode zu tun Verwenden Sie zum Initiieren eine gespeicherte Prozedur oder verwenden Sie zum Initiieren einen normalen SQL-Befehl. Es gibt keinen Unterschied. Die zweite Frage ist: Wie isoliert die Datenbank Transaktionen?
Um diese Frage zu beantworten, müssen Sie zunächst den Sperrmechanismus und die Isolationsstufe der Datenbanktransaktion in der Datenbank verstehen. Sperren in der Datenbank können in drei Typen unterteilt werden: gemeinsame Sperren, exklusive Sperren und Aktualisierungssperren. Verwenden Sie unterschiedliche Sperrstufen und arbeiten Sie mit unterschiedlichen Sperrbereichen zusammen, um unterschiedliche Transaktionsisolationsstufen zu erreichen und auf dieser Basis Transaktionen gleichzeitig oder seriell auszuführen.
Die dritte Frage: Warum weist die Transaktion am Anfang dieses Artikels Parallelitätsprobleme auf?
Da „select“ zu Beginn der Transaktion ausgeführt wird und „select“ eine gemeinsame Sperre verwendet, ist es möglich, dass gleichzeitige Transaktionen „select“ gleichzeitig ausführen, was dazu führt, dass sie denken, dass es sich bei allen um einen legalen Vorgang handelt Zeit und Warteschlange für die Ausführung nachfolgender Transaktionen. Dadurch ist es tatsächlich möglich, doppelte Daten einzufügen, z. B. wenn nur noch ein Produkt übrig ist, aber zwei Kundenaufträge erstellt werden.
In einer Transaktion
Gemäß dem, was zuvor gesagt wurde, mit Einfügen, Aktualisieren oder Das Löschen kann in einer Transaktion erfolgen. Die Standardtransaktionsebene führt künstlich zu einer Transaktionsserialisierung, sodass Sie mit update zu Beginn der Transaktion gemeinsame Daten aktualisieren können. In diesem Fall werden Transaktionen desselben Typs serialisiert und dann hinzugefügt Beurteilungsaussage , Wird verwendet, um zu bestimmen, ob nachfolgende Transaktionsinhalte ausgeführt werden sollen. Dies reicht aus, um sicherzustellen, dass alle Vorgänge ordnungsgemäß und rechtmäßig durchgeführt werden. Der einzige Nachteil besteht darin, dass es zu Leistungsproblemen kommen kann.
Außerhalb der Transaktion
Es gibt immer mehr verteilte Systeme, aber neu verteilte Systeme verfügen auch über einige gemeinsam genutzte Ressourcen, wie z. B. Redis oder Zookeeper , können Sie Redis oder Zookeeper verwenden, um einige verteilte Sperren zu erstellen (dieser Typ gehört zu anderen Blog-Beiträgen und wird hier nicht näher erläutert). Die Verwendung von Sperren außerhalb der Transaktion zum Serialisieren von Transaktionen desselben Typs und die anschließende Zusammenarbeit mit dem internen Prüfmechanismus der Transaktion reichen aus, um sicherzustellen, dass das Parallelitätsproblem der Transaktion gelöst wird.
Probleme und Verarbeitung der Transaktionsparallelität
Die vier Hauptmerkmale von Datenbanktransaktionen und der Isolationsgrad von Transaktionen
Datenbanktransaktionen und Parallelität
Isolationsebene von SQL Server-Transaktionen
Das obige ist der detaillierte Inhalt vonBeispiele für Transaktionen und Parallelitätsprobleme in Datenbanken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!