Datenbankmodell
Aus ShopleiterWiki
1.2.4 Datenbankmodell EAV
EAV
Wer sich mit der Thematik Datenbanken befasst, der kennt sicherlich das Entity Relationship Model (ERM). Das ER-Modell gilt als der Standard für die Datenmodellierung. Es besteht ausschließlich aus Entitäts- und Beziehungstypen. Eine Entität ist ein individuelles und identifizierbares Objekt der abstrakten oder realen Welt: Produkte, Personen, Kunden oder Begriffe. Durch Attribute werden diese Entitäten näher beschrieben. Die Wechselwirkungen und Abhängigkeiten zwischen den Entitäten stellt man durch Beziehungen (Relationship) dar, wie „Kunde bestellt Produkt“.
Aus Gründen der Flexibilität setzen die Macher von Magento auf das Entity Attribute Value (EAV) Datenbankmodell (Open Schema oder Object Attribute Value Model). Den Vorteil der Flexibilität erkauft man sich allerdings mit einer gewissen Komplexität. Beispielsweise ist der Zugriff auf Datenbank-Inhalte bei Magento häufiger beschäftigt, als dies bei relationalen Tabellen der Fall ist. Bevor Sie Änderungen an der Datenbank vornehmen, müssen Sie sich unbedingt mit den Prinzipien der EAV-Modellierung und deren Implementierung gut auszukennen. Varien hat eine Namenskonvention für die Erkennung der zentralen EAV-Tabellen eingeführt: die knapp 15 Tabellen erhalten den Prefix „eav_“. Für einen ersten Einblick finden Sie an der unten aufgeführten Adresse das Datenbank-Diagramm.
Unter bestimmten Voraussetzungen lohnt sich der Einsatz des EAV-Modells. Der optimale Fall tritt genau dann ein, wenn die Gesamtanzahl an Attributen ziemlich groß ist und gleichzeitig die Anzahl der Attribute, die auf ein Objekt zutreffen, eher gering ist. Diese Festlegung trifft wohl auf die meisten Shop-Installation zu. Sie benötigen pro Artikel wahrscheinlich 3 – 5 Attribute. Mit ziemlicher Sicherheit bieten Sie in Ihrem Shop nicht nur einen einzigen Artikeltyp an. Für jede weitere Kategorie sind wieder zusätzliche Attribute erforderlich. Je größer der Shop und je verschiedenartiger die Shop-Artikel sind, umso mehr profitieren Sie vom Entity Attribute Value Modell.
MyISAM vs. InnoDB
Für den Betrieb von Magento ist eine Datenbank erforderlich. Mit über 6 Mio. Installationen und mehr als 35.000 Downloads pro Tag ist MySQL ist eines der beliebtesten Open-Source-Datenbankverwaltungssysteme der Welt. MySQL bietet verschiedene Tabellentypen bzw. -formate. Als Standard dient häufig MyISAM, aber daneben gibt es noch andere wie InnoDB, BDB oder MemoryDB. Ähnlich wie beim Datenbankmodell geht Magento hier eigene Wege und nutzt InnoDB als Tabellentyp.
Generell unterscheidet man transaktionsbasierte (z. B. InnoDB) und nicht-transaktionsbasierte Formate (z. B. MyISAM). Als eine Transaktion zählt ein untrennbar verbundener Block aufeinander folgender SQL-Befehle. Die transaktionsbasierten Engines umschließen einen Block mit BEGIN (bzw. START TRANSACTION) und COMMIT. Der Datenbank-Zustand wird nur dann tatsächlich abgespeichert, falls der COMMIT-Befehl erreicht wird, d.h. dann wurden alle vorherigen Befehle erfolgreich ausgeführt. Mit dem ROLLBACK-Befehl machen Sie eine laufende Transaktion rückgängig, damit werden alle Änderungen komplett zurückgenommen.
| Tabellentyp | Vor- und Nachteile |
|---|---|
| MyISAM | + Hohe Kompatiblität
+ Speichern und abrufen von Daten ist sehr schnell + Bietet schnelle Volltextsuche + Tabellensperren möglich (geringer Lock-Overhead) -- Unterstützt keine Transaktionen -- Sequenzielle Speicher-Engine (nur eine Anwendung erhält Schreibzugriff) |
| InnoDB | + Transaktionssicher (dank COMMIT und ROLLBACK)
+ Ermöglicht parallele Abfragen und paralleles Schreiben + Unterstützt referentielle Integrität durch Fremdschlüssel + Effiziente Ausnutzung des Prozessors -- Zeilensperren möglich (höherer Lock-Overhead) -- Erhöhter Speicherplatzbedarf (ca. 5x mehr als MyISAM) -- Bietet keine Volltextsuche |
Tabelle 1.5: Tabellentypen-Vergleich – MyISAM vs. InnoDB
Vergleich von MySQL Storage Engine
Die Transaktionssicherheit von InnoDB ist, wie bei fast allen Datenbanken, bei Systemabstürzen nicht immer gegeben. Zur Beschleunigung von Datenbanksystemen kommen diverse Caching-Verfahren zum Einsatz. Das bedeutet letztlich, dass Schreib-Operationen nicht sofort auf dem Speichermedium ausgeführt werden. Stattdessen werden zunächst alle Operationen in einem Zwischenspeicher gesammelt, z. B. Festplatten-, Betriebssystem- oder Bytecode-Cache. Bei einem Systemabsturz bleiben jedoch nur die Daten erhalten, die schon auf das Speichermedium geschrieben wurden.
Wie sagt man so schön, alles hat seine Vor- und Nachteile. Aber selbst den erhöhten Speicherplatzbedarf und die schwächelnde Performance bekommen Sie mit einem ordentlich konfigurierten Webserver ganz gut in den Griff. Wer nur mal eben zwanzig Artikel in seinem Shop anbietet, für den eignen sich wahrscheinlich andere Shop-Systeme besser. Daher ist der Einsatz von InnoDB sicherlich eine gute Wahl, ist doch so niemals die Konsistenz der Datenbank in Gefahr. Außerdem ist es hervorragend auf die schnelle parallele Verarbeitung großer Datenmengen ausgelegt.
