Übersicht über die MySQL-Speicher-Engine Was ist eine Speicher-Engine? Daten in MySQL werden mithilfe verschiedener Techniken in Dateien (oder im Speicher) gespeichert. Jede dieser Technologien verwendet unterschiedliche Speichermechanismen, Indizierungstechniken und Sperrebenen und bietet letztlich ein breites Spektrum unterschiedlicher Funktionen und Fähigkeiten. Durch die Wahl anderer Technologien können Sie die Geschwindigkeit erhöhen oder die Funktionalität verbessern und so die Gesamtfunktionalität Ihrer Anwendung verbessern. Wenn Sie beispielsweise mit großen Mengen temporärer Daten arbeiten, möchten Sie möglicherweise eine In-Memory-Speicher-Engine verwenden. Die In-Memory-Speicher-Engine kann alle Tabellendaten im Speicher speichern. Alternativ benötigen Sie möglicherweise eine Datenbank, die Transaktionen unterstützt (um ein Daten-Rollback sicherzustellen, wenn Transaktionen fehlschlagen). Diese verschiedenen Technologien und die zugehörigen Funktionen werden in MySQL als Speicher-Engines (auch Tabellentypen genannt) bezeichnet. MySQL wird mit einer Reihe verschiedener standardmäßig konfigurierter Speicher-Engines ausgeliefert, die im MySQL-Server vorkonfiguriert oder aktiviert werden können. Sie können Speicher-Engines für Server, Datenbanken und Tabellen auswählen, um maximale Flexibilität bei der Auswahl zu haben, wie Sie Ihre Informationen speichern, wie Sie sie abrufen und welche Leistung und Funktionalität Sie für Ihre Daten benötigen. Diese Flexibilität bei der Auswahl der Speicher- und Abrufmethode für Ihre Daten ist ein Hauptgrund für die große Beliebtheit von MySQL. Andere Datenbanksysteme (einschließlich der meisten kommerziellen Optionen) unterstützen nur eine Art der Datenspeicherung. Leider führt der Einheitsansatz anderer Datenbanklösungen dazu, dass Sie entweder Abstriche bei der Leistung machen oder Stunden oder sogar Tage damit verbringen, Ihre Datenbank im Detail zu optimieren. Mit MySQL müssen wir nur die verwendete Speicher-Engine ändern. Welche Speicher-Engines unterstützt MySQL? Zu den von MySQL 5.6 unterstützten Speicher-Engines gehören InnoDB, MyISAM, MEMORY, CSV, BLACKHOLE, FEDERATED, MRG_MYISAM, ARCHIVE und PERFORMANCE_SCHEMA. NDB und InnoDB stellen transaktionssichere Tabellen bereit, während andere Speicher-Engines nicht transaktionssichere Tabellen bereitstellen. Funktionen verschiedener Speicher-Engines Überblick Der MySQL-Server verwendet ein mehrschichtiges Design und unabhängige Module sowie eine Plug-in-Speicher-Engine-Architektur, die das Laden der Speicher-Engine in einen neuen ausgeführten MySQL-Server ermöglicht, wie im Abschnitt „Pluggable Storage Engines“ in der Abbildung gezeigt. Mit der MySQL-Serverarchitektur müssen Anwendungsprogrammierer und DBAs nicht mehr alle zugrunde liegenden Implementierungsdetails berücksichtigen, da auf Speicherebene ein konsistentes und einfaches Anwendungsmodell und eine API bereitgestellt werden (d. h. Pluggable Storage Engines). Obwohl unterschiedliche Speicher-Engines über unterschiedliche Fähigkeiten verfügen, sind die Anwendungen daher von ihnen entkoppelt. Die Speicher-Engine ist für den Umgang mit dem Dateisystem verantwortlich. Funktionen verschiedener Speicher-Engines Parallelität: Einige Anwendungen haben detailliertere Sperranforderungen (z. B. Sperren auf Zeilenebene) als andere. Transaktionsunterstützung: Nicht alle Anwendungen erfordern Transaktionen, aber für diejenigen, die es tun, gibt es klar definierte Anforderungen, wie z. B. die ACID-Konformität. Referenzielle Integrität: Durch DDL-definierte Fremdschlüssel muss der Server die referenzielle Integrität der zugehörigen Datenbank erzwingen. Physischer Speicher: Dazu gehören verschiedene Dinge, von der Gesamtseitengröße von Tabellen und Indizes über das zum Speichern der Daten erforderliche Format bis hin zu den physischen Datenträgern. Indexunterstützung: Verschiedene Anwendungen verwenden in der Regel unterschiedliche Indizierungsstrategien. Jede Speicher-Engine hat normalerweise ihre eigene Indizierungsmethode, aber einige Indizierungsmethoden (z. B. B-Tree-Indizes) sind bei fast allen Speicher-Engines gleich. Speichercache: Verschiedene Anwendungen reagieren auf bestimmte Speichercachestrategien besser als auf andere. Während also einige Speichercaches allen Speicher-Engines gemeinsam sind (wie etwa der Cache für Benutzerverbindungen, der Hochgeschwindigkeitsabfragecache von MySQL usw.), sind andere Cachestrategien nur bei Verwendung einer bestimmten Speicher-Engine eindeutig definiert. Leistungsunterstützung: einschließlich mehrerer E/A-Threads für parallele Vorgänge, Thread-Parallelität, Datenbank-Checkpoints, Batch-Einfügeverarbeitung usw. Weitere Zielfunktionen: können die Unterstützung georäumlicher Operationen, Sicherheitsbeschränkungen für bestimmte Datenverarbeitungsvorgänge usw. umfassen. Die oben genannten Anforderungen werden sich in unterschiedlichen Bedürfnissen niederschlagen. Es ist unmöglich, sie durch ein einziges System zu erfüllen. Einige der oben genannten Eigenschaften sind in sich widersprüchlich, was ein Problem darstellt, wenn man das eine mit dem anderen teilen will. Wenn Sie einige der oben genannten Punkte berücksichtigen, entsteht eine Speicher-Engine, die als Plug-in-Engine für bestimmte spezielle Anforderungen verwendet werden kann. Wie in der folgenden Abbildung dargestellt, sind einige vorhandene Speicher-Engines und ihre grundlegenden Funktionen: Einführung in verschiedene Suchmaschinen InnoDB Die Standardspeicher-Engine für MySql 5.6. InnoDB ist eine transaktionssichere Speicher-Engine mit Commit-, Rollback- und Crash-Recovery-Funktionen zum Schutz von Benutzerdaten. Die Zeilensperren von InnoDB und das konsistente, sperrenfreie Lesen im Oracle-Stil verbessern die Mehrbenutzer-Parallelität und Leistung. InnoDB speichert Benutzerdaten in einem gruppierten Index, um den I/O-Overhead allgemeiner Abfragen basierend auf dem Primärschlüssel zu reduzieren. Um die Datenintegrität sicherzustellen, unterstützt InnoDB auch Fremdschlüsseleinschränkungen. MeinIsAM MyISAM unterstützt weder Transaktionen noch Fremdschlüssel. Sein Vorteil ist die schnelle Zugriffsgeschwindigkeit, aber die Sperre auf Tabellenebene begrenzt seine Leistung bei Lese-/Schreiblasten. Daher wird es häufig in schreibgeschützten oder lesedominierten Datenszenarien verwendet. Erinnerung Alle Daten werden im Speicher abgelegt und dienen zur schnellen Suche nach nicht kritischen Daten. Tabellen vom Speichertyp greifen sehr schnell auf Daten zu, da ihre Daten im Speicher gespeichert sind und standardmäßig einen HASH-Index verwenden. Sobald der Dienst jedoch beendet wird, gehen die Daten in der Tabelle verloren. SCHWARZES LOCH Black Hole-Speicher-Engine, ähnlich wie /dev/null von Unix. Das Archiv empfängt nur Daten, speichert sie aber nicht. Abfragen von Tabellen in dieser Engine geben häufig einen leeren Satz zurück. Diese Tabelle kann in einer Master-Slave-Konfiguration verwendet werden, in der DML-Anweisungen an den Slave-Server gesendet werden müssen, der Master-Server jedoch keine Kopie dieser Daten behält. CSV Bei den Tabellen handelt es sich eigentlich um durch Kommas getrennte Textdateien. Die CSV-Tabelle ermöglicht Ihnen den Import und Export von Daten im CSV-Format und die Interaktion mit Skripten und Anwendungen im gleichen Lese- und Schreibformat. Da CSV-Tabellen keine Indizes haben, ist es besser, die Daten im Normalbetrieb in eine InnoDB-Tabelle zu legen und die CSV-Tabelle nur während der Import- oder Exportphase zu verwenden. NDB (auch bekannt als NDBCLUSTER) – Diese Cluster-Datenbank-Engine eignet sich besonders für Anwendungen, die ein Höchstmaß an Betriebszeit und Verfügbarkeit erfordern. Hinweis: Die NDB-Speicher-Engine wird in der Standardversion von MySQL 5.6 nicht unterstützt. Unterstützt derzeit Die Versionen von MySQL Cluster sind: MySQL Cluster NDB 7.1 basierend auf MySQL 5.1; MySQL Cluster NDB 7.2 basierend auf MySQL 5.5; MySQL Cluster NDB 7.3 basierend auf MySQL 5.6. MySQL Cluster NDB 7.4, ebenfalls basierend auf MySql 5.6, befindet sich derzeit in der Entwicklung. Verschmelzen Ermöglicht einem MySql-DBA oder -Entwickler, eine Reihe identischer MyISAM-Tabellen zu gruppieren und sie als einzelnes Objekt zu referenzieren. Anwendbar auf Datenszenarien mit extrem großem Maßstab, wie etwa Data Warehouses. Föderiert Bietet die Möglichkeit, eine logische Datenbank zu erstellen, indem verschiedene MySQL-Server von mehreren physischen Maschinen aus verbunden werden. Geeignet für verteilte oder Datenmarktszenarien. Beispiel Diese Speicher-Engine wird zum Speichern von MySQL-Quellcodebeispielen verwendet, die veranschaulichen, wie Sie mit dem Schreiben einer neuen Speicher-Engine beginnen. Es richtet sich vor allem an interessierte Entwickler. Diese Speicher-Engine ist nur ein „Stub“, der nichts tut. Sie können mit dieser Engine Tabellen erstellen, jedoch keine Daten darin speichern und auch keine Indizes daraus abrufen. Gängige Speicher-Engines und anwendbare Szenarien InnoDB Für Anwendungen zur Transaktionsverarbeitung, mit Unterstützung von Fremdschlüsseln und Zeilensperren. Wenn die Anwendung relativ hohe Anforderungen an die Integrität der Dinge stellt, Datenkonsistenz unter gleichzeitigen Bedingungen erfordert und die Datenvorgänge neben Einfügungen und Abfragen auch viele Aktualisierungs- und Löschvorgänge umfassen, ist die InnoDB-Speicher-Engine besser geeignet. InnoDB reduziert nicht nur Sperren, die durch Löschungen und Aktualisierungen verursacht werden, sondern kann auch die vollständige Übermittlung und Rückgängigmachung von Transaktionen sicherstellen. Es ist eine geeignete Wahl für Systeme wie Abrechnungssysteme oder Finanzsysteme, die hohe Anforderungen an die Datengenauigkeit stellen. Transaktionen MeinIsAM Wenn die Anwendung hauptsächlich auf Lese- und Einfügevorgängen mit nur wenigen Aktualisierungs- und Löschvorgängen basiert und keine hohen Anforderungen an die Transaktionsintegrität und Parallelität stellt, können Sie diese Speicher-Engine auswählen. Erinnerung Das Halten aller Daten im Speicher ermöglicht einen extrem schnellen Zugriff in Umgebungen, in denen Datensätze und andere ähnliche Daten schnell gefunden werden müssen. Der Nachteil von Memory besteht darin, dass es die Größe der Tabelle begrenzt. Obwohl die Daten bei einer abnormalen Beendigung der Datenbank normal wiederhergestellt werden können, gehen die im Speicher gespeicherten Daten verloren, sobald die Datenbank geschlossen wird. Die Verwendung der Speicher-Engine in MySQL Mit der Speicher-Engine in Zusammenhang stehende SQL-Anweisungen --Zeigen Sie die aktuelle Standardspeicher-Engine an: mysql> Variablen wie „default_storage_engine“ anzeigen; --Fragen Sie die von der aktuellen Datenbank unterstützten Speicher-Engines abmysql> show engines \G; Ergebnis Geben Sie die Speicher-Engine zum Erstellen einer Tabelle an Beim Erstellen einer Tabelle angeben mysql> Tabelle erstellen ai (ID bigint (12), Name varchar (200)) ENGINE = MyISAM; mysql> Tabelle erstellen Land (ID int (4), cname varchar (50)) ENGINE = InnoDB; --Sie können die Anweisung „alter table“ auch verwenden, um die Speicher-Engine einer vorhandenen Tabelle zu ändern. mysql> Tabelle ändern AI-Engine = innodb; Geben Sie in der Konfigurationsdatei an #my.ini-Datei [mysqld] Standard-Speicher-Engine = INNODB MySQL-Workflow Die MySQL-Architektur besteht aus insgesamt vier Schichten, die in der obigen Abbildung durch gepunktete Linien getrennt sind. Zunächst einmal ist der Dienst der obersten Ebene nicht nur MySQL vorbehalten. Die meisten Client/Server-Tools oder -Dienste, die dem Netzwerk zur Verfügung gestellt werden, haben eine ähnliche Architektur. Beispielsweise: Verbindungsverarbeitung, Autorisierungsauthentifizierung, Sicherheit usw. Die zweite Schicht der Architektur umfasst die meisten MySQL-Kerndienste. Beinhaltet: Abfrageanalyse, Analyse, Optimierung, Zwischenspeicherung und alle integrierten Funktionen (z. B. Datums-, Uhrzeit-, Mathematik- und kryptografische Funktionen). Gleichzeitig werden alle speicherübergreifenden Engine-Funktionen auf dieser Ebene implementiert: gespeicherte Prozeduren, Trigger, Ansichten usw. Die dritte Schicht enthält die Speicher-Engine. Die Speicher-Engine ist für das Speichern und Abrufen von Daten in MySQL verantwortlich. Der Server kommuniziert über eine API mit der Speicher-Engine. Diese Schnittstellen schirmen die Unterschiede zwischen verschiedenen Speicher-Engines ab und machen diese Unterschiede für den Abfrageprozess der höheren Ebene transparent. Die Speicher-Engine-API enthält mehr als ein Dutzend Low-Level-Funktionen zum Ausführen von Vorgängen wie „Starten einer Transaktion“. Speicher-Engines analysieren SQL jedoch im Allgemeinen nicht (InnoDB analysiert Fremdschlüsseldefinitionen, da es diese Funktion selbst nicht implementiert) und verschiedene Speicher-Engines kommunizieren nicht miteinander, sondern reagieren lediglich auf Serveranforderungen der oberen Ebene. Die vierte Schicht umfasst das Dateisystem. Sämtliche Tabellenstrukturen und Daten sowie Protokolle der Benutzeraktionen werden letztlich in Form von Dateien auf der Festplatte gespeichert. Oben finden Sie eine ausführliche Erläuterung der Speicher-Engine in MySQL. Weitere Informationen zur MySQL-Speicher-Engine finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Nginx-Anti-Hotlink- und Anti-Crawler-Konfiguration
>>: JavaScript implementiert das Topfschlagen-Spiel von Gray Wolf
Was ist Vuex vuex: ist ein speziell für vue.js en...
Da ich heute MySQL installieren wollte, bin ich a...
Die Hauptunterschiede sind folgende: 1. MySQL ver...
Inhaltsverzeichnis 1. Datenbankübersicht 1.1 Entw...
1. Vorbereitung Middleware: Tomcat, Redis, Nginx ...
Vorwort Für Datei- oder Verzeichnisberechtigungen...
Ich habe ein Dockerfile für OpenResty auf CentOS7...
Vorwort Während des Entwicklungsprozesses werden ...
Bei gleichzeitigen Zugriffen kann es zu nicht wie...
Die von MySQL erstellte Optimierung besteht im Hi...
Unter Linux können die Befehle cat, more und less...
Inhaltsverzeichnis Klassenkomponente Funktionale ...
Bereiten Sie eine CentOS6-Installationsdiskette (...
Inhaltsverzeichnis 1. Template-Tag in HTML5 2. Ei...
Beim Schreiben von HTML-Code sollte die erste Zei...