Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung der MySQL-Datenbanktransaktionen und der Speicher-Engine

Detaillierte Erläuterung der MySQL-Datenbanktransaktionen und der Speicher-Engine

青灯夜游
青灯夜游nach vorne
2019-11-27 18:07:162474Durchsuche

Detaillierte Erläuterung der MySQL-Datenbanktransaktionen und der Speicher-Engine

1. Relationale Datenbanken und nicht-relationale Datenbanken

1 🎜>

1) Die Daten erscheinen in Form einer Tabelle

2) Jede Zeile hat verschiedene Datensatznamen

3) Das Datenfeld, das dem Datensatznamen in jeder Spalte entspricht

4) Viele Zeilen und Spalten bilden ein Formular

5) Mehrere Formulare bilden eine Datenbank

2. Vorteile einer relationalen Datenbank:

1) Komplexe Abfragen: Zur Vereinfachung können SQL-Anweisungen verwendet werden Führen Sie sehr komplexe Datenabfragen zwischen einer Tabelle und mehreren Tabellen durch.

2) Transaktionsunterstützung: ermöglicht die Umsetzung von Datenzugriffsanforderungen mit hoher Sicherheitsleistung.

3. Vorteile nicht relationaler Datenbanken:

1) Leistung: NOSQL basiert auf Schlüssel-Wert-Paaren, die man sich vorstellen kann als Tabellen Die entsprechende Beziehung zwischen dem Primärschlüssel und dem Wert muss nicht von der SQL-Schicht analysiert werden, sodass die Leistung sehr hoch ist.

2) Skalierbarkeit: Da es auf Schlüssel-Wert-Paaren basiert, gibt es keine Kopplung zwischen den Daten, sodass eine horizontale Erweiterung sehr einfach ist.

Frage: Was sind die Unterschiede zwischen den drei traditionellen Datenbanken?

Antwort: Die drei basieren auf der Verbindung zwischen Daten. Die hierarchische Datenbank hat eine Baumstruktur und die Netzwerkdatenbank hat eine relationale Datenbank -dimensionale Tabellenstruktur.

2. Transaktion (ACID)

Eine Transaktion ist eine Reihe von Transaktionen, die als eine einzige logische Einheit ausgeführt werden Arbeitsvorgänge: Diese Vorgänge werden als Ganzes an das System übermittelt und entweder alle oder keiner von ihnen ausgeführt. Eine Transaktion ist eine unteilbare logische Arbeitseinheit.

Transaktionen müssen die folgenden vier Attribute aufweisen, die als ACID-Attribute bezeichnet werden:

Atomizität (Atomizität) : Eine Transaktion ist ein vollständiger Vorgang. Jede Operation einer Sache ist untrennbar (atomar); entweder werden alle ausgeführt oder keine ausgeführt

Konsistenz (Konsistenz) : Wenn die Transaktion abgeschlossen ist, werden Daten ausgeführt muss in einem konsistenten Zustand sein;

Isolation (Isolation) : Alle gleichzeitigen Transaktionen, die die Daten ändern, sind voneinander isoliert, was darauf hinweist, dass Transaktionen unabhängig sein müssen , es sollte in keiner Weise von anderen Transaktionen abhängen oder diese beeinflussen;

Dauerhaftigkeit (Dauerhaftigkeit) : Nach Abschluss der Transaktion sind ihre Änderungen an der Datenbank dauerhaft Das Transaktionsprotokoll kann die Persistenz von Transaktionen aufrechterhalten.

Isolationsebene der Transaktion:

Nicht festgeschriebene Inhalte lesen (auch Dirty Read Read Uncommitted genannt): Bedeutet, dass alle Transaktionen die Ausführungsergebnisse anderer nicht festgeschriebener Transaktionen sehen können. Es kann zu Dirty-Read-, nicht wiederholbaren Lese- und Phantom-Read-Problemen kommen.

Festgeschriebenen Inhalt lesen (festgeschrieben lesen): Eine Transaktion kann nur Änderungen sehen, die von festgeschriebenen Transaktionen vorgenommen wurden. Dirty Reads können vermieden werden und es kann zu Problemen mit nicht wiederholbaren Reads und Phantom Reads kommen.

Wiederholbares Lesen (wiederholbares Lesen): Dies ist die Standard-Transaktionsisolationsstufe von MySQL. Sie stellt sicher, dass mehrere Instanzen derselben Transaktion gleichzeitig Daten lesen werden die gleichen Datenzeilen sehen. Schmutzige Lesevorgänge und nicht wiederholbare Lesevorgänge können vermieden werden, und es kann zu Phantom-Lesevorgängen kommen.

Serialisierbar (serialisierbar): Es ist die höchste Isolationsstufe, die jeder gelesenen Datenzeile eine gemeinsame Sperre hinzufügt, um zu verhindern, dass sie gelesen wird gegenseitig und lösen so das Phantomleseproblem. Dirty Reads, nicht wiederholbare Reads und Phantom Reads können vermieden werden.

Probleme durch gleichzeitige Transaktionen:

1 Update verloren : Zwei Transaktionen T1 und T2 haben dieselben Daten gelesen und geändert. Das von T2 übermittelte Ergebnis überschreibt das von T1 übermittelte Ergebnis, wodurch die Änderung von T1 verloren geht.

2. Dirty Read: Transaktion T1 hat bestimmte Daten geändert und auf die Festplatte zurückgeschrieben. Nachdem Transaktion T2 dieselben Daten gelesen hat, hat T1 einige Probleme Der Grund wird widerrufen. Zu diesem Zeitpunkt werden die von T2 gelesenen Daten auf ihren ursprünglichen Wert zurückgesetzt. Dann sind die von T2 gelesenen Daten „schmutzige“ Daten Daten.

3. Nicht wiederholbares Lesen : bezieht sich auf das mehrmalige Lesen derselben Daten innerhalb einer Transaktion. Bevor diese Transaktion beendet wurde, hat eine andere Transaktion ebenfalls auf dieselben Daten zugegriffen. Dann können zwischen den beiden Lesevorgängen der Daten in der ersten Transaktion aufgrund der Änderung der zweiten Transaktion die von der ersten Transaktion zweimal gelesenen Daten unterschiedlich sein. Dies bedeutet, dass die von derselben Abfrage innerhalb einer Transaktion zweimal gelesenen Daten unterschiedlich sind und daher als nicht wiederholbarer Lesevorgang bezeichnet werden.

4. Phantomlesung : Beispiel: Es gibt derzeit 10 Mitarbeiter mit einem Gehalt von 5.000. Transaktion A liest alle 10 Mitarbeiter mit einem Gehalt von 5.000. Zu diesem Zeitpunkt hat Transaktion B einen Datensatz mit einem Gehalt von 5.000 eingefügt. Zu diesem Zeitpunkt liest Transaktion A erneut die Mitarbeiter mit einem Gehalt von 5.000, und der Datensatz ist 11. Zu diesem Zeitpunkt erfolgt eine Phantomlesung.

Was ist der Unterschied zwischen nicht wiederholbarem Lesen und Phantomlesen? Der Schwerpunkt des nicht wiederholbaren Lesens liegt auf der Änderung, und der Schwerpunkt des Phantomlesens liegt auf dem Hinzufügen oder Löschen.

MVCC (Mehrversions-Parallelitätskontrollmechanismus): InnoDBs MVCC wird nach jeder Zeile von Datensätzen übergeben Dies wird durch das Speichern von zwei ausgeblendeten Spalten erreicht. Die Erstellungszeit der Zeile und die Löschzeit der Zeile werden jeweils gespeichert (hier wird nicht der tatsächliche Zeitwert, sondern die Systemversionsnummer gespeichert). Bei jedem Start einer neuen Transaktion wird die Systemversionsnummer automatisch erhöht. Die Systemversionsnummer zu Beginn der Transaktion wird als Transaktions-ID zum Vergleich mit der Versionsnummer jeder abgefragten Datensatzzeile verwendet. Nach der Verwendung von MVCC treten unter der wiederholbaren Leseisolationsstufe keine Phantomlesevorgänge auf.

3. Speicher-Engine

Die Speicher-Engine ist die zugrunde liegende Softwareorganisation der Datenbank Engine zum Erstellen, Abfragen, Aktualisieren und Löschen von Daten.

1. InnoDB (Clustered-Index-Methode)

Die zugrunde liegende Speicherstruktur von innodb ist ein B+-Baum, und jeder Knoten des Baums entspricht Für eine Seite von innodb ist die Seitengröße festgelegt und im Allgemeinen auf 16 KB festgelegt. Die Nicht-Blattknoten haben nur Schlüsselwerte und die Blattknoten enthalten vollständige Daten.

Verwendungsszenarien: 1) Häufig aktualisierte Tabellen, die mehrere gleichzeitige Aktualisierungsanforderungen verarbeiten

2) Unterstützung transaktionssicherer Tabellen (ACID), unterstützt Zeilensperren und Fremdschlüssel;

3) Kann über Bin-Log-Protokolle usw. wiederhergestellt werden.

innodb, wenn kein Primärschlüssel vorhanden ist gesetzt, Es wird automatisch ein 6-Byte-Primärschlüssel generiert (für den Benutzer nicht sichtbar).

2. MyISAM (nicht gruppierte Indexmethode)

MyISAM war die Standardspeicher-Engine von MySQL vor 5.1, bei der die Leistung im Vordergrund stand. Es unterstützt jedoch weder Transaktionen noch Zeilensperren und Fremdschlüssel. Beim Einfügen oder Aktualisieren von Daten muss die gesamte Tabelle gesperrt werden, und die Effizienz ist geringer. Es wird nur der Index zwischengespeichert, nicht die echten Daten. MyISAM liest Daten sehr schnell und belegt nicht viel Speicher und Speicherressourcen.

MyISAM erlaubt die Existenz eines Primärschlüssels und ist eine statische Indexstruktur.

Frage: Was ist der Unterschied zwischen MyISAM und InnoDB in MySQL?

Antwort: In der MySQL-Datenbank sind die beiden am häufigsten verwendeten Engines innodb und myisam. InnoDB ist derzeit die Standardspeicher-Engine für MySQL.

1) Transaktionen: MyISAM legt Wert auf Leistung und die Abfragegeschwindigkeit ist schneller als beim InnoDB-Typ, unterstützt jedoch keine Transaktionen. InnoDB bietet Transaktionsunterstützung.

2) Fremdschlüssel: MyISAM unterstützt keine Fremdschlüssel, InnoDB unterstützt jedoch Fremdschlüssel.

3) Sperren: InnoDB unterstützt nur Sperren auf Tabellenebene und Sperren auf Tabellenebene verbessern die Leistung erheblich der gleichzeitigen Leistung mehrerer Benutzer. innodb eignet sich besser für Situationen mit vielen Einfüge- und Aktualisierungsvorgängen, während myisam für Situationen mit häufigen Abfragen geeignet ist. Darüber hinaus ist die Zeilensperre der Innodb-Tabelle nicht absolut. Wenn MySQL beim Ausführen einer SQL-Anweisung den zu scannenden Bereich nicht ermitteln kann, sperrt Innodb auch die gesamte Tabelle, zum Beispiel: update table set num=1 where name like „. %aaa% ".

4) Volltextindex: MyISAM unterstützt den Volltextindex, Innodb unterstützt keinen Volltextindex. innodb bietet Volltextindexunterstützung ab MySQL 5.6.

5) Tabellenprimärschlüssel: Myisam lässt die Existenz von Tabellen ohne Primärschlüssel zu. innodb: Wenn der Primärschlüssel nicht festgelegt ist, wird automatisch ein 6-Byte-Primärschlüssel generiert (unsichtbar für des Benutzers).

6) Die spezifische Anzahl der Zeilen in der Tabelle: myisam: select count(*) from table, myisam liest einfach die Anzahl der gespeicherten Zeilen. Da myisam über einen integrierten Zähler verfügt, liest es beim Zählen(*) direkt vom Zähler.

innodb: speichert nicht die spezifische Anzahl von Zeilen in der Tabelle. Das heißt, wenn Sie select count(*) from table ausführen, durchsucht innodb die gesamte Tabelle, um zu berechnen, wie viele Zeilen vorhanden sind.

Empfohlenes Lernen: MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der MySQL-Datenbanktransaktionen und der Speicher-Engine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen