- So funktioniert die Indizierung in Magento
- Was genau macht es?
- Warum ist es erforderlich?
Antworten:
In Magento gibt es verschiedene Arten von Indizes.
Alle Indexer sind dazu da, die Dinge schneller laufen zu lassen.
Ich werde hier nur einige davon behandeln.
Flat Index
Es gibt 2 solcher Indizes. Eine für Kategorien und eine für Produkte.
Standardmäßig sind Kategorie- und Produktentitäten (sowie Kunden und Kundenadressen, die in dieser Situation jedoch nicht wichtig sind) EAV- Entitäten. Dies ist sehr schön für die Erweiterbarkeit. Aber es ist ein Leistungskiller, weil Sie viele Verknüpfungen oder mehrere Abfragen benötigen, um alle Werte für alle Attribute zu erhalten.
Hier kommt der Flat Indexer ins Spiel.
Es wandelt die EAV-Struktur in eine flache Struktur um. Ich meine, es erstellt eine Tabelle (eine für jede Geschäftsansicht in Magento), die eine Spalte hat, die einem Attribut entspricht. Dadurch wird die Auswahl schneller. Für Kategorien werden alle Attribute in Tabellenspalten konvertiert. Für Produkte nur die, die Sie als "In der Produktliste verwendet" markieren, da Sie alle Arten von Produkten mit unterschiedlichen Attributen verkaufen können und die Erstellung einer einzigen Tabelle mit Milliarden Spalten möglicherweise nicht möglich ist.
Einige Produkte sind möglicherweise deaktiviert oder gehören nicht zu einer bestimmten Website, und es ist nicht erforderlich, sie in die Sucheinträge aufzunehmen. Sie werden vom Indexer ausgeschlossen.
Die generierten flachen Tabellen werden zum Lesen von Daten im Frontend verwendet. Das Backend verwendet weiterhin die EAV-Struktur.
Katalogsuchindex
Sie können anhand vieler Attributwerte nach Produkten suchen. Einige von ihnen sind möglicherweise nicht in den vom flachen Indexer generierten flachen Tabellen enthalten. Dieser Index füllt eine Tabelle mit den durchsuchbaren Attributwerten für Produkte, damit Sie sie leichter anhand von Schlüsselwörtern suchen können. Wenn Sie alle Informationen in einer Tabelle (oder einem Feld) haben, können Sie die Volltextsuche verwenden und relevante Ergebnisse erhalten.
Produktpreise .
Der Preis eines Produkts kann durch viele Variablen beeinflusst werden. Zum Beispiel Regeln für Kundengruppen, Websites und Katalograbatte.
Wie oben bedeutet das Erhalten der Produkte mit ihren Preisen eine Menge Beitritte oder Mehrfachauswahl. Außerdem haben Bundle-Produkte ein seltsames Preissystem. Dieser Indexer aggregiert die Daten in einigen Tabellen ( catalog_product_index_price_*
) und erleichtert die Auswahl (Sortieren und Filtern) erheblich.
Catalog url Rewrites Bereinigt
die Regeln zum Umschreiben von URLs, indem festgelegt wird, welche URL welchem Produkt oder welcher Kategorie entspricht. Auf diese Weise kann das interne System der URL-Verwaltung leichter entscheiden, welche Seite beim Aufrufen einer nicht standardmäßigen URL angezeigt werden soll. Anstatt alle Produkt- und Kategorien-URL-Schlüssel zu durchsuchen, wird nur in einer Tabelle gesucht.
Kategorieprodukte
In Magento können Sie ein Kategorieattribut mit dem Namen 'Is Anchor' auf true oder false setzen. Wenn dies zutrifft, werden in der betreffenden Kategorie alle Produkte aus den untergeordneten Kategorien aufgelistet. Um diese Echtzeit zu ermitteln, sind wiederum mehr Ressourcen erforderlich als nur das Lesen einer Tabelle. Dieser Indexer erstellt die Verknüpfung zwischen Produkten und Kategorien auf der Grundlage der Verknüpfungen, die Sie im Backend festgelegt haben, und dem Flag "Ist Anker" in den Kategorien.
Lagerstatus
Für einfache Produkte ist es einfach. Sie können vorrätig oder nicht vorrätig sein, aber für konfigurierbar, gruppiert und gebündelt ist das nicht so einfach. Sie können vorrätig oder nicht vorrätig sein, abhängig von den untergeordneten Produkten, die dem Hauptprodukt zugeordnet sind. Auch hier (ich wiederhole mich hier nur) würde das Abrufen des Status in Echtzeit eine Menge Fragen bedeuten.
Produktattribute .
Dieser sammelt alle Attribute, die aus demselben Grund in der geschichteten Navigation verwendet werden können. Sie alle an einem Ort haben, um schneller lesen zu können.
Tag-Aggregation
Ich habe keine Ahnung, was dies bewirkt. Ich habe in einem echten Live-Projekt noch nie Tags verwendet.
Das kann ich nicht gutschreiben, da es dem Originalbeitrag entnommen ist: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail
Die Indizierung von Magento ist nur im Geiste der Indizierung auf Datenbankebene ähnlich. Wie Anton feststellt, handelt es sich um einen Denormalisierungsprozess, um einen schnelleren Betrieb einer Site zu ermöglichen. Lassen Sie mich versuchen, einige der Gedanken zu erläutern, die hinter der Magento-Datenbankstruktur stehen, und zu erklären, warum die Indizierung für einen schnellen Betrieb erforderlich ist.
In einer "typischeren" MySQL-Datenbank wäre eine Tabelle zum Speichern von Katalogprodukten in etwa so aufgebaut:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
Dies ist schnell abrufbar, stellt jedoch ein grundlegendes Problem für ein Teil der E-Commerce-Software dar: Was tun Sie, wenn Sie weitere Attribute hinzufügen möchten? Was ist, wenn Sie Spielzeug verkaufen und statt einer Größensäule 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 (z. B. Walmart) dazu führen würde, dass die Zeilen zu 90% leer sind und der Versuch, neue Attribute zu pflegen, so gut wie unmöglich ist.
Um dieses Problem zu lösen, teilt Magento Tabellen in kleinere Einheiten auf. Ich möchte in dieser Antwort nicht das gesamte EAV-System neu erstellen. Akzeptieren Sie daher 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 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 angezeigt habe). Tatsächlich gibt es jetzt keinen Grund mehr für zwei Produkte, identische Felder zu haben, sodass wir ganze Produkttypen mit unterschiedlichen Attributen erstellen können!
Diese Flexibilität ist jedoch mit Kosten verbunden. Wenn ich die Farbe eines Hemdes in meinem System finden möchte (ein triviales Beispiel), muss ich Folgendes finden:
Magento hat früher so funktioniert, aber es war absolut langsam. Um eine bessere Leistung zu erzielen, haben sie einen Kompromiss eingegangen: Nachdem der Shop-Inhaber die gewünschten Attribute definiert hat, können Sie von Anfang an den großen Tisch generieren. Wenn sich etwas ändert, nuke es aus dem Weltraum und generiere es erneut. Auf diese Weise werden Daten in erster Linie in unserem ansprechenden flexiblen Format gespeichert, aber aus einer einzelnen Tabelle abgefragt.
Diese resultierenden Nachschlagetabellen sind die Magento "Indizes". Wenn Sie neu indizieren, sprengen Sie die alte Tabelle und generieren sie erneut.
Hoffe das klärt die Dinge ein bisschen!
nuke it from space
, nett :)
Magento ist ein ziemlich mächtiges und komplexes System. Es ermöglicht das Arbeiten mit riesigen Datenmengen, aber wenn die Datenbank mit Tonnen von Datensätzen überlastet ist, wird es schwer und langsam. Magento verwendet Indizes, um dieses Problem zu lösen. Indizes sind zusätzliche Datenbanktabellen mit einigen flachen Daten, mit denen schnelle Antworten aus der Datenbank organisiert werden können.
Standardmäßig aktualisiert das Kernsystem die Indizes für die Speicherung jedes Elements. In einigen Fällen müssen Sie dies jedoch manuell tun, beispielsweise für bestimmte Arten von Massenaktionen usw. Sie können die Indizes jederzeit über das Admin-Backend aktualisieren (Admin-> System-> Indexverwaltung). Aber manchmal verursacht es Probleme.
Wenn Sie beispielsweise über 10.000 Produkte und viele Kategorien verfügen, kann das Neuerstellen des Index zum Umschreiben der Katalog-URL Stunden dauern. Dann kann das PHP-Skript einfach brechen, weil die max_execution_time überschritten wird. Es gibt eine Möglichkeit, mehrere Probleme zu lösen, indem Sie den Neuindexierungsprozess über die Befehlszeile ausführen.