Die Indizierung von Magento ähnelt nur im Geiste der Indizierung auf Datenbankebene. Wie Anton feststellt, handelt es sich um einen Prozess der Denormalisierung, um einen schnelleren Betrieb einer Website zu ermöglichen. Lassen Sie mich versuchen, einige der Gedanken hinter der Magento-Datenbankstruktur zu erklären und warum sie eine Indexierung für einen schnellen Betrieb erforderlich macht.
In einer "typischeren" MySQL-Datenbank würde eine Tabelle zum Speichern von Katalogprodukten etwa so aufgebaut sein:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
Das lässt sich schnell abrufen, hinterlässt jedoch ein grundlegendes Problem für eine E-Commerce-Software:Was tun Sie, wenn Sie weitere Attribute hinzufügen möchten? Was ist, wenn Sie Spielzeug verkaufen und anstelle einer Größenspalte age_range
benötigen ? Nun, Sie könnten eine weitere Spalte hinzufügen, aber es sollte klar sein, dass dies in einem großen Geschäft (denken Sie zum Beispiel an Walmart) zu Zeilen führen würde, die zu 90 % leer sind, und der Versuch, neue Attribute beizubehalten, ist nahezu unmöglich.
Um diesem Problem entgegenzuwirken, teilt Magento Tabellen in kleinere Einheiten auf. Ich möchte in dieser Antwort nicht das gesamte EAV-System neu erstellen, also akzeptieren Sie bitte dieses vereinfachte Modell:
PRODUCT:
product_id INT
sku VARCHAR
PRODUCT_ATTRIBUTE_VALUES
product_id INT
attribute_id INT
value MISC
PRODUCT_ATTRIBUTES
attribute_id
name
Jetzt ist es möglich, Attribute nach Belieben hinzuzufügen, indem Sie neue Werte in product_attributes
eingeben und dann angrenzende Datensätze in product_attribute_values
einfügen . Dies ist im Grunde das, was Magento tut (mit etwas mehr Respekt für Datentypen, als ich hier gezeigt habe). Tatsächlich gibt es jetzt überhaupt keinen Grund mehr, dass zwei Produkte identische Felder haben, sodass wir ganze Produkttypen erstellen können mit unterschiedlichen Attributen!
Diese Flexibilität hat jedoch ihren Preis. Wenn ich die color
finden möchte eines Hemdes in meinem System (ein triviales Beispiel), muss ich Folgendes finden:
- Die
product_id
des Artikels (in der Produkttabelle) - Die
attribute_id
fürcolor
(in der Attributtabelle) - Schließlich der eigentliche
value
(in der attribute_values-Tabelle)
Früher hat Magento so funktioniert, aber es war verdammt langsam. Um eine bessere Leistung zu ermöglichen, sind sie also einen Kompromiss eingegangen:Sobald der Shop-Besitzer die gewünschten Attribute definiert hat, können Sie die große Tabelle von Anfang an generieren. Wenn sich etwas ändert, atomisieren Sie es aus dem Weltraum und erzeugen Sie es erneut. Auf diese Weise werden Daten hauptsächlich in unserem netten flexiblen Format gespeichert, aber aus einer einzigen Tabelle abgefragt.
Diese resultierenden Nachschlagetabellen sind die Magento-"Indizes". Wenn Sie neu indizieren, sprengen Sie die alte Tabelle und erzeugen sie erneut.
Hoffe, das klärt die Dinge ein wenig!
Danke, Joe