Eine kurze Einführung in die MySQL-Speicher-Engine

Eine kurze Einführung in die MySQL-Speicher-Engine

1. MySql-Architektur

Bevor wir die Speicher-Engine vorstellen, stellen wir zunächst die MySQL-Architektur vor, damit jeder weiß, wo die Speicher-Engine im gesamten MySQL-System steht. Die folgende Abbildung ist ein offizielles Architekturdiagramm:

MySQL-Architekturdiagramm

Wie aus der obigen Abbildung ersichtlich ist, besteht MySQL aus den folgenden Teilen:

  • Komponenten des Verbindungspools
  • Management Services und Tool-Komponenten
  • SQL-Schnittstellenkomponenten
  • Query Analyzer-Komponenten
  • Optimizer-Komponenten
  • Cache-Komponente
  • Plug-in-Speicher-Engine
  • Physische Dateien

Das wichtigste Merkmal, das MySQL-Datenbanken von anderen Datenbanken unterscheidet, ist ihre Plug-in-Tabellenspeicher-Engine. Wie aus der obigen Abbildung ersichtlich, unterstützt MySql viele Arten von Speicher-Engines. Es ist wichtig zu beachten, dass Speicher-Engines auf Tabellen und nicht auf Datenbanken basieren.

2. MySql-Speicher-Engine

Der Vorteil der Plug-in-Speicher-Engine besteht darin, dass je nach den Merkmalen bestimmter Anwendungen unterschiedliche Speicher-Engines ausgewählt werden können. Im Folgenden sind einige häufig verwendete Speicher-Engines für MySQL aufgeführt.

2.1 InnoDB-Speicher-Engine

Die InnoDB-Speicher-Engine unterstützt Transaktionen und ist in erster Linie für Anwendungen zur Online-Transaktionsverarbeitung (OLTP) konzipiert. Zu seinen Funktionen gehören das Zeilensperrendesign, die Unterstützung von Fremdschlüsseln und die Unterstützung für sperrenfreies Lesen ähnlich wie Oracle, d. h. der Standardlesevorgang generiert keine Sperren. Ab der MySQL-Datenbankversion 5.5.8 ist die InnoDB-Speicher-Engine die Standard-Speicher-Engine.

InnoDB erreicht eine hohe Parallelität durch die Verwendung von Multi-Version Concurrency Control (MVCC) und implementiert vier SQL-Standardisolationsebenen, wobei die Standardebene die Ebene REPEATABLE ist. Gleichzeitig wird eine Strategie namens Next-Key-Locking verwendet, um Phantomlesen zu verhindern. Darüber hinaus bietet die InnoDB-Speicher-Engine auch Hochleistungs- und Hochverfügbarkeitsfunktionen wie Einfügepuffer, Doppelschreiben, adaptiven Hash-Index und Vorauslesen.

Für die Speicherung der Daten in der Tabelle verwendet die InnoDB-Speicher-Engine einen Cluster-Ansatz, sodass der Speicher jeder Tabelle in der Reihenfolge des Primärschlüssels gespeichert wird. Wenn Sie beim Definieren einer Tabelle keinen Primärschlüssel explizit angeben, generiert die InnoDB-Speicher-Engine für jede Zeile eine 6-Byte-ROWID und verwendet diese als Primärschlüssel.

2.2 MyISAM-Speicher-Engine

Die MyISAM-Speicher-Engine unterstützt weder Transaktionen noch Tabellensperrendesign, unterstützt jedoch die Volltextindizierung und ist hauptsächlich auf einige OLAP-Datenbankanwendungen ausgerichtet. Ein weiteres einzigartiges Merkmal der MyISAM-Speicher-Engine besteht darin, dass ihr Pufferpool nur Indexdateien, keine Datendateien zwischenspeichert, was einen großen Unterschied zu den meisten Datenbanken darstellt. Ab MySQL 5.0 unterstützt MyISAM standardmäßig 256 TB Einzeltabellendaten, was ausreicht, um die allgemeinen Anwendungsanforderungen zu erfüllen.

2.3 Speicher-Storage-Engine

Die Memory-Speicher-Engine (früher als HEAP-Speicher-Engine bekannt) speichert Tabellendaten im Speicher. Wenn die Datenbank neu gestartet wird oder abstürzt, verschwinden die Daten in der Tabelle. Es eignet sich gut für temporäre Tabellen, in denen temporäre Daten gespeichert werden, sowie für Breitengradtabellen in Data Warehouses. Die Speicher-Speicher-Engine verwendet standardmäßig Hash-Indizes anstelle der bekannten B+-Baumindizes.

Obwohl die Speicher-Engine sehr schnell ist, unterliegen sie bei der Verwendung dennoch gewissen Einschränkungen. Beispielsweise unterstützt es nur Tabellensperren, weist eine schlechte Parallelitätsleistung auf und unterstützt keine TEXT- und BLOB-Spaltentypen. Am wichtigsten ist, dass Felder mit variabler Länge (varchar) auf die gleiche Weise gespeichert werden wie Felder mit fester Länge (char), was zu Speicherverschwendung führt.

Darüber hinaus wird leicht übersehen, dass die MySQL-Datenbank die Memory-Speicher-Engine als temporäre Tabelle verwendet, um den Zwischenergebnissatz der Abfrage zu speichern. Wenn der Zwischenergebnissatz größer als die Kapazitätseinstellung der Speicher-Speicher-Engine-Tabelle ist oder wenn das Zwischenergebnis Felder vom Spaltentyp TEXT oder BLOB enthält, konvertiert die MySQL-Datenbank es in eine MyISAM-Speicher-Engine-Tabelle und speichert es auf der Festplatte. Wie bereits erwähnt, speichert MyISAM keine Datendateien im Cache, sodass die Leistung der zu diesem Zeitpunkt generierten temporären Tabelle bei Abfragen verloren geht.

2.4 Archivspeicher-Engine

Die Archivspeicher-Engine unterstützt nur INSERT- und SELECT-Operationen und unterstützt Indizes ab MySQL 5.1. Die Archivspeicher-Engine verwendet den Zlib-Algorithmus, um Datenzeilen für die Speicherung mit einem Komprimierungsverhältnis von bis zu 1:10 zu komprimieren. Wie der Name schon sagt, eignet sich die Archive-Speicher-Engine gut zum Speichern archivierter Daten, beispielsweise Protokollinformationen. Die Archivspeicher-Engine verwendet Zeilensperren, um Einfügevorgänge mit hoher Parallelität zu implementieren, ist jedoch keine transaktionssichere Speicher-Engine. Ihr Designziel besteht hauptsächlich darin, Einfüge- und Komprimierungsfunktionen mit hoher Geschwindigkeit bereitzustellen.

Natürlich unterstützt MySql auch viele andere Speicher-Engines, die hier nicht einzeln aufgeführt sind.

3. Vergleich von Speicher-Engines

Die Speicher-Engine kann als Speicherstruktur der Tabelle verstanden werden, und jede Speicher-Engine unterstützt unterschiedliche Funktionen. MySQL unterstützt Plug-in-Speicher-Engines und Sie können für jede Datentabelle eine andere Speicher-Engine angeben. Die Merkmale häufig verwendeter Speicher-Engines sind wie folgt:

Wir können auch den folgenden Befehl verwenden, um zu sehen, welche Speicher-Engines die aktuelle Datenbank unterstützt:

-- Sehen Sie sich die unterstützten Speicher-Engines an. Show Engines;

Nachfolgend finden Sie eine kurze Zusammenfassung der drei am häufigsten verwendeten Speicher-Engines:

  • InnoDB: Die Standardspeicher-Engine von MySQL, die Transaktionen, Sperren auf Zeilen- und Tabellenebene, verschiedene Indizes und Fremdschlüssel unterstützt. Höhere Versionen von MySQL unterstützen auch Volltextindizes, aber die Effizienz der Batch-Dateneinfügung ist gering.
  • MyISAM: Es verfügt über eine hohe Effizienz beim Einfügen und Abfragen von Daten und unterstützt die Volltextindizierung, jedoch keine Datenbanktransaktionen oder Sperren auf Zeilenebene, sondern nur Sperren auf Tabellenebene.
  • SPEICHER: Bei Verwendung dieser Speicher-Engine werden die Daten in der Tabelle in den Speicher geladen und die Abfrage ist sehr schnell, aber der Speicherbedarf ist hoch.

Daher sollten wir die geeignete Speicher-Engine entsprechend den spezifischen Anforderungen der Anwendung auswählen, anstatt blind die Standardspeicher-Engine (INNODB) zu wählen.

Wenn Sie Transaktionssicherheit (ACID-Konformität) für Commit, Rollback und Wiederherstellung bereitstellen möchten und Parallelitätskontrolle benötigen, ist InnoDB eine gute Wahl. Wenn die Datentabelle hauptsächlich zum Einfügen und Abfragen von Datensätzen verwendet wird, bietet die MyISAM-Engine eine höhere Verarbeitungseffizienz. Wenn Sie Daten nur vorübergehend speichern müssen, die Datenmenge nicht groß ist und keine hohe Datensicherheit erforderlich ist, können Sie die Daten in der MEMORY-Engine im Speicher speichern. MySQL verwendet diese Engine als temporäre Tabelle, um die Zwischenergebnisse der Abfrage zu speichern. Wenn nur INSERT- und SELECT-Operationen vorhanden sind, können Sie die Archiv-Engine wählen. Die Archiv-Speicher-Engine unterstützt Einfügeoperationen mit hoher Parallelität, ist jedoch nicht transaktionssicher. Die Archivspeicher-Engine eignet sich sehr gut zum Speichern archivierter Daten. Beispielsweise können mit der Archiv-Engine Protokollinformationen aufgezeichnet werden.

4. Referenzen

MySQL Technischer Insider

Das Obige ist eine kurze Einführung in die Details der MySQL-Speicher-Engine. Weitere Informationen zur MySQL-Speicher-Engine finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Eine kurze Analyse der MySQL Memory Storage Engine
  • Detaillierte Erklärung der Speicher-Engine in MySQL
  • MySQL wählt die richtige Speicher-Engine
  • Lassen Sie uns über die Speicher-Engine in MySQL sprechen
  • Beschreiben Sie kurz die MySQL InnoDB-Speicher-Engine
  • Zusammenfassung der Unterschiede zwischen den MySQL-Speicher-Engines MyISAM und InnoDB
  • Ein tiefer Einblick in die MySQL InnoDB-Speicher-Engine
  • Detaillierte Erläuterung der Funktionen und Verwendung allgemeiner MySQL-Speicher-Engines
  • Speicher-Engine und Protokollbeschreibung basierend auf MySQL (ausführliche Erklärung)
  • Zusammenfassung der MySQL-Speicher-Engine
  • Detaillierte Erklärung des Unterschieds zwischen MyISAM und InnoDB in der MySQL-Speicher-Engine
  • Kenntnisse über die MySQL Memory-Speicher-Engine

<<:  Vuex kombiniert Sitzungsspeicherdaten, um das Problem des Datenverlusts beim Aktualisieren der Seite zu lösen

>>:  Detaillierte Erläuterung des Startens und Einhängens des Docker-Nginx-Containers in den lokalen

Artikel empfehlen

Methode zum Schreiben von bedingten Kommentaren und Beispielcode

Als Front-End-Ingenieure müssen wir mit dem IE ve...

CUDA8.0 und CUDA9.0 koexistieren unter Ubuntu16.04

Vorwort Einige der früheren Codes auf Github erfo...

So installieren Sie das Modul „lua-nginx-module“ in Nginx

ngx_lua_module ist ein Nginx-HTTP-Modul, das den ...

Implementierungscode für mehrzeilige Textkomponenten der Vue-Faltanzeige

Faltdisplay mit mehrzeiligem Textbaustein Falten ...

VMware Workstation-Installation unter Linux

Vom Einsteiger bis zum Neueinsteiger ist das Linu...

Grafisches Tutorial zur Installation und Konfiguration von CenOS6.7 mysql 8.0.22

CenOS6.7 installiert MySQL8.0.22 (empfohlene Samm...

SpringBoot integriert Activiti7-Implementierungscode

Nach der offiziellen Veröffentlichung von Activit...

Einführung und Verwendung des Javascript-Generators

Was ist ein Generator? Ein Generator ist ein Code...

Analyse des Konfigurationsprozesses der Nginx-HTTP-Integritätsprüfung

Passive Prüfung Mit passiven Integritätsprüfungen...