InnoDB – Die beste MySQL-Speicher-Engine?
Wenn größere Websites langsam laufen, liegt das häufig daran, dass ihre Datenbanken nicht optimiert wurde. Ordnung ist das halbe Leben – das trifft auch auf das digitale zu. Bei stetig wachsenden Datenbeständen braucht es ein passendes Datenbankmanagementsystem oder kurz DBMS. Ein solches DBMS ist MySQL, mit dem Sie große Datenmengen unkompliziert verarbeiten, ablegen und dauerhaft aufbewahren können.
Bei der Speicherung der Daten in MySQL spielt InnoDB eine wichtige Rolle. Bei InnoDB handelt es sich um ein Speichersubsystem, dass sich in den letzten Jahren insbesondere dank besserer Performance und Zuverlässigkeit gegen andere Speicher-Engine durchsetzen konnte. Wir erläutern, was InnoDB genau ist, welche Nachteile es mit sich bringt und wie es sich vom Speichersubsystem MyISAM unterscheidet.
- IONOS Cloud-Partner: Die Experten für Ihren Datenbank-Betrieb
- Flexibel: Maßgeschneiderte Datenbank-Lösungen ganz auf Ihre Bedürfnisse
- Rechenzentren in Deutschland: Ihre Daten sind sicher
Was ist InnoDB?
InnoDB hat sich vom Speichersubsystem hoch zur Allzweck-Speicher-Engine für MySQL entwickelt. Die hohe Zuverlässigkeit auch bei hoher Leistung hat dazu geführt, dass MySQL InnoDB ab Version 5.6 zur Standard-Speicher-Engine gemacht hat.
MySQL ist eine Open-Source-Datenbank, die den Einsatz verschiedener Speicher-Engines erlaubt. Das macht die Datenbank so flexibel für das Webhosting. Neben InnoDB und dem offiziellen Vorgänger MyISAM gibt es noch weitere Engines – wie zum Beispiel BerkeleyDB, CSV, NDB und Federated Engine.
MySQL sorgt als Datenbankmanagementsystem dafür, dass sich Daten in einer Tabelle speichern, indexieren und abfragen lassen. Geht es etwa darum, kleine Datenmengen in großer Zahl zu lesen und zu schreiben, wie bei Websites oder Apps, oder sollen Daten transaktionssicher verarbeitet werden, liefert die Software die passende Lösung. Durch InnoDB erhält MySQL die hierfür erforderliche Speicher-Engine, die sich wie ein Modul verhält, das flexibel in die Software integriert werden kann. MySQL bestimmt dabei aber immer die Art, wie die Daten einer Datenbank gespeichert werden.
Datenbanken bestehen aus Tabellen, die beim Anlegen einer bestimmten Speicher-Engine wie InnoDB zugewiesen werden.
Die Daten werden von den meisten Engines auf Datenträger gespeichert oder sie werden für einen schnellen Zugriff im Hauptspeicher gehalten. InnoDB ermöglicht es, dass Datentransaktionen voneinander isoliert ablaufen: Erst, wenn eine Transaktion abgeschlossen ist, wird sie auf das jeweilige Speichermedium geschrieben. Das verhindert unvollständige Zugriffe auf eine angelegte Datenbank.
Transaktionen sind Datenpakete aus mehreren Operationen, die untrennbar zusammengehören. Wenn eine Operation nicht ausgeführt werden kann, ist die gesamte Transaktion fehlgeschlagen. Um das zu beheben muss nicht nur die fehlerhafte Operation, sondern es müssen auch alle vorherigen rückgängig gemacht werden. Das fordert mehr Zeit als eine reine Operation, aber nur so lässt sich eine konsistente Datenbank sicherstellen.
Warum nutzt MySQL InnoDB?
Jede InnoDB-Tabelle ordnet die Daten auf dem Datenträger an. Dadurch ist der Zugriff etwas langsamer, aber deutlich sicherer, da jede Tabelle mit einem Primärschlüssel optimiert ist. Die Datenauswahl ist dabei verhältnismäßig schneller, das Einfügen und Aktualisieren aber eben langsamer. Deshalb eignet sich InnoDB als MySQL Speicher-Engine vor allem für große Datenbanken und insbesondere dann, wenn viele Daten miteinander verknüpft sind.
Wie bereits erwähnt, hängen die Daten einer Transaktion bei InnoDB zusammen. Wenn Daten gelöscht werden, löscht InnoDB alle referenzierten Daten automatisch mit. Das macht es für den Anwender wesentlich einfacher, die referentielle Integrität der Datenbank einzuhalten. Diese referentielle Integrität muss allerdings im Vorfeld festgelegt werden, sonst wird sie nicht automatisch eingehalten. Genauso lassen sich beispielsweise auch Schreibzugriffe auf Datensätze sperren.
Die Tabellenstruktur von InnoDB wird in frm-Dateien, Nutzdaten und Indizes in einem Tabellenraum gespeichert, der mit der Datenbank verbunden ist und sich über eine bis mehrere Dateien erstrecken kann. Auch hier greift die referentielle Integrität: Die Konfiguration des Tabellenraums kann sich auf verschiedene Verzeichnisse verteilen, dies muss aber zu Beginn der Arbeit eingestellt werden und lässt sich nicht nachträglich anpassen. Man muss sich die Arbeit mit einer InnoDB-Tabelle wie das Arbeiten mit einer Festplattenpartition vorstellen, wo nachträgliche Anpassungen zu einem Datenverlust führen können.
Das wohl prominenteste Beispiel, das auf InnoDB zurückgreift, ist mediawiki, die Software, die unter anderem die Grundlage für die Website Wikipedia bildet.
Ein passendes Datenbanksystem ist eine der wichtigsten Komponenten einer erfolgreich geführten Webanwendung. Mit den Webhosting-Lösungen von IONOS erhalten Sie leistungsstarke Datenbank-Power im maßgeschneiderten Paket mit Webspace, Arbeitsspeicher und eigener Domain!
Was sind die Vor- und Nachteile der Kombination aus MySQL und InnoDB?
Grundsätzlich ist InnoDB jünger und moderner als andere MySQL-Speicher-Engines. Die Engine ist aber auch komplexer und setzt eine wesentlich leistungsstärkere Datenbank-Umgebung voraus. Weil aber Webanwendungen selbst immer komplexer werden, sind Betreiber auf die Möglichkeiten (Transaktionen, Fremdschlüssel), die MySQL dank InnoDB bieten kann, zunehmend angewiesen: Alle Vorgänge auf einer Webseite beruhen auf dem Auslesen von Datenbank-Inhalten. Durch InnoDB kann die Reaktionszeit – etwa, wenn Beiträge aktualisiert oder neue Artikel angelegt werden – zwar verlangsamt werden. Der entscheidende Part– die Auslieferung der neuen Inhalte an den User – erfolgt jedoch deutlich schneller.
Vor- und Nachteile halten sich bei InnoDB die Waage, sofern es um eine gewöhnliche, moderne Website geht. Bei einem Webshop hingegen werden die Grenzen schnell sichtbar: Hier finden etwa beim Buchungssystem viele Schreibzugriffe statt. Das schreibgeschützte Schlüsselsystem von InnoDB macht dann also wenig Sinn. Stattdessen verwendet man in diesem Zusammenhang eher Tabellen, die Schreibzugriffe besser handhaben, wie zum Beispiel MyISAM.
Der mit Abstand wichtigste Punkt, wenn MySQL InnoDB verwendet: Fehlerhafte Änderungen innerhalb der Datenbanken können dazu führen, dass die gesamte Website unbrauchbar wird. Vor jeder Änderung sollte deshalb ein Back-up der bestehenden Datenbank angelegt werden. Genau für diesen Fall verwendet InnoDB ein Transaktionsprotokoll, das im Fehlerfall eine automatische Wiederherstellung unterstützt.
Was ist der Unterschied zwischen InnoDB und MyISAM?
MySQL unterstützt seit Version 5 über zehn verschiedene Speicher-Engines. Am bekanntesten ist MyISAM. Diese Engine speichert Daten der einzelnen Tabellen in zwei Dateien, eine für die Datei, eine für den Index. ISAM steht für Indexed Sequential Access Method (dt. Index-sequenzielle Zugriffsmethode) – es ist also nicht möglich, dass mehrere User oder Anwendungen gleichzeitig in einer Tabelle schreiben. Das sequenzielle Speichern erlaubt immer nur den Schreibzugriff durch eine Anwendung. Gelesen werden kann die Tabelle dafür aber von mehreren Usern gleichzeitig. Wenn viele kleine Datenpakete schnell von mehreren Anwendern gleichzeitig gelesen werden müssen, ist MyISAM unschlagbar.
InnoDB entspricht dem ACID-Standard (Atomicity Consistency Isolation Durability). Alle Transaktionen laufen voneinander isoliert ab, aber es können beliebig viele Anwendungen gleichzeitig Daten in eine Tabelle schreiben. Bei der Datenabfrage, dem SELECT, hat InnoDB deutlich die Nase vorne, aber bei den Schreibzugriffen auf eine Datenbank, den INSERT und UPDATE, ist MyISAM etwas schneller. Die geringere Geschwindigkeit wird aber von InnoDB durch das Transaktionsprotokoll mehr als ausgeglichen. MyISAM hat keine automatische Wiederherstellung im Fehlerfall, ein Back-up muss hier also vor Änderungen immer bedacht und erstellt werden.
Die Speicher-Engine InnoDB ist nicht in jedem Fall der beste Ersatz für ihre Vorgängerin MyISAM. Sobald Projekte bzw. der Datenbestand größer bzw. komplexer werden, ist für MySQL InnoDB die richtige Wahl. Für kleinere Datenbanken bzw. Anwendungen ist MyISAM deutlich performanter. Richtig eingesetzt, stellt sich nicht die Entweder-oder-Frage für die beiden Speicher-Engines. Bei Bedarf können beide Module auch in derselben Datenbank nebeneinander verwendet werden.