Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbank Ecke:Anfänger-Guide für Mysql-Speicher-Engines

Wenn eine Datenbank erstellt wird, übersah man oft aber kritische Faktor in der Leistung ist die Speicher-Engine (insbesondere die Datenbank wächst). In vielen Fällen ist die Versuchung, nur die Standardeinstellung übernehmen und weiter auf Ihr Projekt zu entwickeln. Dies kann zu unerwarteten negativen Auswirkungen auf der Leistung führen, Backups und Datenintegrität später im Lebenszyklus von Anwendungen, wie zum Beispiel, wenn Ihr Team Geräte Analytik und MySQL-Dashboards.

Um diese potenziellen Gefahren zu vermeiden, werden wir einen genaueren Blick auf einige der am häufigsten verwendeten Speicher-Engines von MySQL (ab Version 5.7) unterstützt nehmen.

Unterstützte Speicher-Engines

Was sind meine Optionen?

Standardmäßig MySQL 5.7 unterstützt zehn Speicher-Engines (InnoDB, MyISAM, Speicher, CSV, Archive, Blackhole, NDB, Merge, Federated und Beispiel). Um zu sehen, welche verfügbar sind und unterstützt von dem Server, verwenden Sie diesen Befehl:

mysql> SHOW ENGINES \ G

Dies wird Ausgabe eine Liste von Speicher-Engines und Ihnen sagen, welche verfügbar sind, nicht verfügbar sind, oder die sich derzeit auf Standard festgelegt. Der „Support“. Spalte wird angezeigt ‚JA‘, ‚NEIN‘ oder ‚Standard‘ bzw.

Bei einigen Anwendungen die Notwendigkeit entstehen kann verschiedene Speicher-Engines für verschiedene Tabellen in derselben Datenbank haben. Dies ist ein Beispiel dafür, warum Sie müssen sorgfältig das Datenmodell für Ihre Anwendung planen. In den meisten Fällen werden jedoch nur ein Speicher-Engine benötigt werden.

Storage Engine Capabilities

Was sind sie gut?

Schauen wir uns einige der am häufigsten verwendeten Speicher-Engines einen genaueren Blick. Dies gibt uns eine Vorstellung von dem, was jeder Motor entworfen wurde, zu tun und wie sie am besten verwendet werden, um unsere Unternehmensziele zu dienen.

InnoDB: Die Standardoption in MySQL 5.7, InnoDB ist eine robuste Speicher-Engine, dass Angebote:

  • Voll ACID Compliance
  • Commit, Rollback und Crash-Recovery
  • Sperren auf Zeilenebene
  • FOREIGN KEY referenzielle Integritätsbedingungen
  • Erhöhung Mehrbenutzer concurrency (über nicht-Verriegelung liest)

Mit der obigen Funktionalität, dass InnoDB bietet, ist es offensichtlich, warum es die Standard-Engine in MySQL ist. Es ist ein Motor, der funktioniert gut und bietet viele der erforderlichen Attribute, dass jede Datenbank benötigen würde. Allerdings ist eine umfassende Diskussion aller seiner Fähigkeiten nicht in den Anwendungsbereich dieses Artikels. Dies ist der Motor, die höchstwahrscheinlich in den meisten Anwendungen verwendet werden.

MyISAM: Die Funktionalität, dass Sets MyISAM auszeichnet, ist seine Fähigkeit für:

  • Volltextsuche indiziert
  • Sperren auf Tabellenebene
  • Mangel an Unterstützung für Transaktionen

Obwohl es sich um eine schnelle Speicher-Engine ist, ist es am besten für die Verwendung in Leseschweren geeignet ist und vor allem Anwendungen wie Data Warehousing und Web-Anwendungen lesen, die keine Transaktionsunterstützung oder ACID Compliance benötigen.

NDB (Oder NDBCLUSTER):Wenn eine Cluster-Umgebung ist, wo Ihre Datenbank arbeiten werden, NDB ist die Speicher-Engine der Wahl. Es ist am besten, wenn Sie brauchen:

  • Distributed Computing
  • Hohe Redundanz
  • Hohe Verfügbarkeit
  • Die höchstmögliche Uptimes

Beachten Sie, dass die Unterstützung für NDB nicht in der Verteilung von Standard-MySQL-Server 5.7-Binärdateien enthalten ist. Sie werden auf die neueste Binär-Version von MySQL Cluster zu aktualisieren. Obwohl, wenn Sie in einer Cluster-Umgebung sind zu entwickeln, haben Sie wahrscheinlich die notwendige Erfahrung mit diesen Aufgaben zu bewältigen haben.

CSV: Eine nützliche Speicher-Engine, wenn Datenbedarf zu, dass die Verwendung CSV-Daten mit anderen Anwendungen gemeinsam genutzt werden. Die Tabellen werden als kommagetrennte Textdateien gespeichert. Obwohl dies macht die Daten mit Skripten und Anwendungen teilen einfacher, ist ein Nachteil, dass die CSV-Dateien nicht indiziert sind. So sollen die Daten in einer InnoDB-Tabelle, bis die Import / Export-Phase des Prozesses gespeichert werden.

Blackhole: Dieser Motor übernimmt jedoch keine Daten speichern. Ähnlich wie bei der UNIX / dev / null, Abfragen immer eine leere Menge zurück. Dies kann in einer verteilten Datenbankumgebung nützlich sein, wenn Sie zum Speichern von Daten nicht lokal oder in der Leistung oder andere Testsituationen wollen.

Archiv: Wie der Name schon sagt, ist dieser Motor für selten erwähnten historische Daten ausgezeichnet. Die Tabellen werden nicht indiziert und Kompression geschieht bei Einsatz. Transaktionen werden nicht unterstützt. Verwenden Sie diese Speicher-Engine für die Archivierung und Abrufen von Daten aus der Vergangenheit.

Federated: Diese Speicher-Engine ist für durch die Verknüpfung von mehreren unterschiedlichen physikalischen MySQL-Server eine einzelne, lokale, logische Datenbank. Werden keine Daten auf dem lokalen Server gespeichert und Anfragen sind an dem jeweiligen Remote-Server automatisch ausgeführt. Es ist ideal für verteilte Data-Mart-Umgebungen und kann erheblich die Leistung verbessern, wenn MySQL für analytische Berichterstattung verwenden.

einen Speicher-Engine benenne

Wie kann ich die Speicher-Engine verwendet wird? ändern sich

Die Speicher-Engine, die verwendet wird, basiert auf Tabellenerstellung festgelegt. Wie bereits erwähnt, ist InnoDB die Standard-Speicher-Engine in MySQL-Versionen 5.5 und höher. Wenn Sie ein anderes verwenden mögen, ist es am besten, dies zu tun in Ihrer CREATE TABLE-Anweisung. Zum Beispiel, sagen wir mal, dass Sie eine Tabelle ermittelt haben, dass der Bedarf der CSV-Speicher-Engine verwenden. Ihre übermäßig vereinfacht CREATE TABLE-Anweisung könnte wie folgt aussehen:

mysql> CREATE TABLE Shared_Data (
-> Data_ID INTEGER NOT NULL,
-> Name VARCHAR (50) NOT NULL,
-> Beschreibung VARCHAR (150)
->) ENGINE =‘CSV‘;
mysql> INSERT INTO Shared_Data WERTE :
Nach dem wir eine INSERT-Anweisung wie gewohnt durchführen
-> (1, 'Gerät ein', 'die neueste Version der besten Tech'),
-> (2, 'Gerät zwei', 'die schnellste auf dem Markt');

Bei Erfolg, wenn Sie das Datenbankverzeichnis überprüfen, sollte es jetzt eine ‚Shared_Data.CSV‘ Datei in es sein, dass die Datensätze enthält, die Sie in die Shared_Data Tabelle eingefügt haben.

Die gleiche Methodik kann für jede einer der vielen Speichermotoren dass MySQL Träger verwendet werden. Obwohl es möglich, die Speicher-Engine zu ändern, nachdem Sie eine Tabelle mit ALTER TABLE erstellt wurde Aussage, ist es am besten Praxis entsprechend zu planen und setzen Sie ihn am Anfang.

Beim Schließen

MySQL viele Optionen hat

Wie Sie sehen können, unterstützt MySQL Angebote für Speicher-Engines in vielen verschiedenen Umgebungen sehr unterschiedliche Aufgaben bewältigen konzipiert. die Motor Identifizierung zu verwenden und wann sie verwendet werden kann uns helfen, unnötige Komplikationen und Performance-Probleme wie unsere Anwendungen Maßstab zu vermeiden.

Egal, ob Sie von 99,999% und Zuverlässigkeit auf dem Distributed Computing Cluster oder Sie benötigen ACID-kompatible Transaktionsunterstützung mit Einschränkungen FOREIGN KEY, MySQL verfügt über einen Speicher-Engine an Ihre Bedürfnisse anpassen.

Wie immer die richtige Planung und Identifizierung Ihrer Projektziele und Anforderungen ist der beste Weg, um genau festzustellen, welche Speicher-Engines am besten für Ihre Anwendung geeignet sind. Hoffentlich ist dieser Artikel dient als nützlicher Ausgangspunkt für Sie in dieser Hinsicht helfen.

Dieser Artikel erschien ursprünglich hier. Neuveröffentlicht mit freundlicher Genehmigung. Geben Sie Ihre Copyright-Beschwerden hier.