MariaDB Server wurde ursprünglich von MySQL abgeleitet und hat daher seine Pluggable-Storage-Engine-Architektur geerbt. Verschiedene Speicher-Engines haben unterschiedliche Eigenschaften in Bezug auf Leistung, aber auch Funktionen und Möglichkeiten. Auf diese Weise können Benutzer das richtige Tool für die Aufgabe auswählen, anstatt dieselbe Speicher-Engine zu verwenden, unabhängig davon, was der Zweck der Daten ist, welche Anforderungen an die Datenspeicherung gestellt werden und wie auf die Daten zugegriffen werden soll. In diesem Blogbeitrag möchten wir uns die in MariaDB verfügbaren Optionen ansehen und mögliche Anwendungsfälle für die verschiedenen verfügbaren Speicher-Engines diskutieren.
Was ist eine Speicher-Engine?
Lassen Sie uns zuerst einen Blick darauf werfen, was die Speicher-Engine ist. MariaDB besteht aus mehreren Ebenen, die zusammenarbeiten. SQL wird von einem von ihnen geparst, dann greift MariaDB über eine gemeinsame API nach Daten. Unter der Haube befindet sich eine Speicher-Engine, die die Daten enthält und auf die Datenanfragen reagiert, die Daten extrahiert und MariaDB zur Verfügung stellt.
Kurz gesagt, MariaDB sendet eine Anfrage für eine Zeile und es liegt ganz an der Speicher-Engine, sie abzurufen und zurückzusenden. MariaDB kümmert sich nicht darum, wie genau die Zeile gespeichert oder wie sie abgerufen wird, es hängt alles von der Implementierung innerhalb der Speicher-Engine ab. Speicher-Engines können auch verschiedene Funktionen implementieren. Transaktionen werden auch vollständig auf der Seite der Speicher-Engine abgewickelt. Das ist der Grund, warum einige der Support-Transaktionen und andere nicht. Mit dieser Architektur ist es möglich, verschiedene Speicher-Engines zu schreiben, die sich der Lösung verschiedener Probleme widmen.
Speicher-Engines im MariaDB-Server
MariaDB wird mit einer Reihe von Speicher-Engines geliefert. Sie können mit einem einfachen Befehl prüfen, welche verfügbar sind:
MariaDB [(none)]> SHOW STORAGE ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.000 sec)
Wie Sie sehen können, gibt es viele davon, wir werden die wichtigsten behandeln.
InnoDB
InnoDB ist offensichtlich DIE Speicher-Engine. Transaktional, das für den Umgang mit OLTP-Datenverkehr entwickelt wurde, kann eine wirklich hervorragende Leistung bieten. Es ist die Standard-Engine, die in MariaDB verwendet wird, und wenn Sie nicht wissen, was Sie tun, möchten Sie wahrscheinlich für Ihre Datenbank dabei bleiben.
MyISAM
MyISAM ist eine der „ursprünglichen“ Speicher-Engines, die in MySQL und dann in MariaDB verfügbar sind. Es ist nicht transaktional, was es nicht ideal für Replikations-Setups und, nun ja, auch für die meisten anderen Umgebungen macht. Es ist immer noch eine sehr schnelle Engine, insbesondere in Bezug auf den Indexzugriff, wodurch es für schreibgeschützte Arbeitslasten geeignet ist, die nicht durch das Sperren von INSERTs und die allgemeine Fragilität von MyISAM beeinträchtigt werden.
Arie
Aria ist eine Engine, die für MariaDB als Ersatz für MyISAM entwickelt wurde. Es ist nicht transaktional, aber absturzsicher, was es viel zuverlässiger macht. Derzeit wird es für System- und temporäre Tabellen verwendet, kann aber auch anstelle von MyISAM für Workloads verwendet werden, die einen schnellen Nur-Lese-Zugriff auf Daten erfordern.
Speicher
Dies ist eine All-in-Memory-Engine, die normalerweise für temporäre In-Memory-Tabellen verwendet wird. Es ist nicht dauerhaft, funktioniert aber möglicherweise für einige schreibgeschützte Workloads.
CSV-Datei
Diese Speicher-Engine dient zum Speichern von Daten in einer Datei als kommagetrennte Werte. Es ist nicht die am häufigsten verwendete Speicher-Engine, es ist sehr spezialisiert, aber es kann dennoch verwendet werden, um Daten aus MariaDB einfach in jede andere Datenbanksoftware sowie Excel oder ähnliche Software zu extrahieren.
Speicher-Engines in MariaDB Enterprise Server
MariaDB Enterprise Server wird mit einigen zusätzlichen Speicher-Engines geliefert, die über die in der Community Edition verfügbaren hinausgehen. Werfen wir auch einen Blick darauf.
ColumnStore
Dies ist eine dedizierte Speicher-Engine für analytische Workloads. Dank der spezifischen Art der Datenspeicherung können große Datenmengen, die häufig für die Berichterstellung benötigt werden, schneller abgerufen werden. Dies könnte die Speicher-Engine Ihrer Wahl für OLAP-Workloads (OnLine Analytical Processing) sein.
S3
S3-Engine ermöglicht Ihnen den Zugriff auf Daten in S3. Es ist eine nicht transaktionale Engine, die Benutzern die Möglichkeit geben soll, Daten in S3 zu archivieren. Lesezugriff ist verfügbar, nachdem die Tabelle erstellt wurde.
Spinne
Mit der Spider-Engine können Sie mehrere MariaDB-Datenbanken über das Netzwerk verbinden und so einen Sharding-Speicher erstellen. Es ist transaktional und erleichtert Benutzern die Skalierung, indem es die Daten auf zahlreiche MariaDB Enterprise Server aufteilt und den Datenverkehr und die Arbeitslast auf sie verteilt.
MyRocks
MyRocks ist eine in Facebook entwickelte Speicher-Engine, sie soll die Schreibverstärkung reduzieren und den Verschleiß von SSD-Laufwerken minimieren. Es handelt sich um eine Transaktions-Engine, die OLTP-Workloads recht gut bewältigen sollte, insbesondere Workloads, die für Social-Media-Websites typisch sind. MyRocks verfügt über eine ziemlich gute Komprimierung, besser als InnoDB, was dazu beitragen kann, die Kosten für die Speicherung erheblich zu reduzieren, wenn der Datensatz zu groß wird, als dass InnoDB ihn richtig handhaben könnte.
Fazit
Wie Sie sehen können, bieten sowohl MariaDB Enterprise als auch Community Server zahlreiche Optionen hinsichtlich der Art und Weise, wie Daten gespeichert werden können. Es gibt Speicher-Engines, die sich bei schreibgeschützten Workloads, OLAP oder großen Datensätzen auszeichnen. Es ist Sache des Benutzers, eine gute Passform auszuwählen. Bitte bedenken Sie, dass Sie sich im Zweifelsfall immer an InnoDB halten können, das im Allgemeinen eine recht gute Leistung bietet und für die meisten Fälle mehr als ausreichen sollte. Es ist für Grenzfälle, in denen Sie möglicherweise nach etwas Passenderem suchen müssen.