Umgang mit High-Volume Attribution mit Magento 2
Veröffentlicht: 2022-08-30Umgang mit High-Volume Attribution mit Magento 2
Erweiterung der Magento 2-Funktionen zur Unterstützung einer großen Anzahl von Gesamtattributen (mehr als 10.000) und einer großen Anzahl von Attributen pro Attributsatz (mehr als 1000 pro Satz)
Einführung
Online-Marktplätze machten im Jahr 2021 67 % des weltweiten E-Commerce aus. Auf den 100 wichtigsten Online-Marktplätzen wurden weltweit 3,23 Billionen US-Dollar ausgegeben. Der Marktplatz von Walmart hat über 100.000 Verkäufer, während Amazon fast 350 Millionen Produkte auf seinem Marktplatz verkauft. Herkömmliche E-Commerce-Plattformen müssen sehr schnell skalieren, um die enormen Datenmengen zu verarbeiten, die sie jetzt bewältigen müssen.
Da immer mehr Verkäufer in den Marktplatz aufgenommen werden, nimmt das Sortiment der angebotenen Produkte zu. Dies führt zu einzigartigen Herausforderungen bei der Kategorisierung dieser Produkte, ohne die Gesamtleistung und Benutzerfreundlichkeit zu beeinträchtigen. Eine dieser Herausforderungen, der sich das Team von McFadyen Digital während einer kürzlichen Marktplatzimplementierung gegenübersah, war die Handhabung der zahlreichen Produktattribute, die mit Verkäuferprodukten geliefert wurden.
Wir haben für einen unserer Kunden in den USA, der industrielle Befestigungsprodukte verkauft, einen B2B-Marktplatz auf Magento und Webkul implementiert. Als mehr Verkäufer an Bord kamen, wuchs das Produktsortiment und damit auch die Anzahl der einzigartigen Produktattribute, die jeder brachte. Die Attributnummer überstieg die Empfehlungen von Magento, und wir hatten erhebliche Leistungsprobleme. Unsere technischen Experten führten eine detaillierte Analyse des Problems durch und konnten einige Problemumgehungen vornehmen, um die Situation zu bewältigen. Wir werden einige davon in diesem Blog besprechen.
.
Produktimport:
Magento empfiehlt, viele Attribute in mehrere Attributsätze aufzuteilen. Wenn jedoch auch die Anzahl der Attributsätze groß wird, wirkt sich dies negativ auf die Leistung des Produkt- und Attributimports aus. Dies geschieht, weil Magento alle Attribute und Attributsätze vorab in den Speicher lädt. Angenommen, es gibt 1000 Attributsätze und wir importieren nur eine Teilmenge von Produkten. In diesem Fall lädt Magento immer noch alle verfügbaren Attribute und Attributsätze, was den Speicherverbrauch und damit die Importprozesszeit erhöht. Beim Importieren von Produkten wird die Methode AbstractType init aufgerufen, die alle in der Produktdatenbank verfügbaren Attribute lädt. Zuerst werden alle Attribute geladen, dann die Attributsätze und diese dann anhand der Attribut-ID geordnet.
Anbieter/magento/module-catalog-import-export/Model/Import/Product/Type/AbstractType

Lösung:
Die einfache Problemumgehung für dieses Problem besteht darin, nur den erforderlichen Attributsatz /products aus der Standard-CSV-Datei zu laden, anstatt zu versuchen, einen vollständigen Import durchzuführen. Angenommen, wir versuchen, eine einzelne Produktkategorie zu importieren. In diesem Fall laden wir nur Attribute aus dieser Kategorie und nicht den Rest der Attribute /attributes-Sets in den Speicher.
Dazu überschreiben wir die init -Methode des Typs Simple Import wie folgt:

Dadurch konnten wir die Leistung erheblich verbessern und die Zeit für den Import wurde um fast 30 % reduziert.
Produktliste:
Beim Besuch einer Kategorieseite übergibt Magento alle Attributdaten an Elastic Search, um Kategorie- und Aggregationsdetails abzurufen. Viele Attribute führen zu einem hohen Speicherverbrauch, was zu Leistungseinbußen führt.
Die FilterableAttributeList-Klasse lädt alle Attribute und Attributsätze in einer Kategorie, auch wenn wir nur eine Teilmenge von Attributen haben, die zum Filtern nach der bestimmten Kategorie erforderlich sind.
Anbieter/magento/module-catalog/Model/Layer/Category/FilterableAttributeList
Wenn wir uns mit Elastic Search verbinden, muss die Anfrage mit zwei Parametern erstellt werden, wie wir es in MySQL beim Erstellen einer Abfrage tun,
- Übereinstimmungsparameter
- Aggregation, die alle Daten liefert, die wir benötigen
Magento verwendet die Aggregation als Ebenennavigation und gibt alle Daten zurück, sodass die Aggregationsanzahl zunimmt, wenn wir eine große Datenmenge haben. Dies wirkt sich auf Elastic Search aus, wenn wir versuchen, mehr Aggregationsdaten in eine einzige Abfrage zu bekommen.

Dies kann auch Probleme bei der Indizierung in den flachen Entitätstabellen verursachen. Flache Entitätstabellen sind nicht pro Attributsatz und daher eine Aggregation aller Attribute, die in die maximalen Spaltengrenzen von MySQL geraten können.
Ab MySQL 5.6.9 beträgt die maximale Anzahl von Spalten 1017, wodurch die Admin-Produktbearbeitungsseite zu einem unbrauchbaren Crawl wird, was schwerwiegende Auswirkungen auf die Darstellung von Produkten im Frontend hat.

So funktioniert Magento:
Magento lädt die Attributmetadaten und dann den Wert für dieses Attribut. Entitäten müssen diese Informationen im Speicher speichern. Da jedoch Attributmetadaten im Magento-Cache gespeichert werden, würden die schlimmsten Auswirkungen beim Laden der ersten Seite auftreten.

Auch hier ist KnockoutJS nicht für hohe Leistung ausgelegt.
Lösung:
Da Magento versucht, alle Attribute einer einzelnen Kategorie zu übergeben, überschreiben Sie den Request Builder, grenzen Sie sich auf die spezifischen Attribute ein, die sich auf die Kategorie beziehen, und stellen Sie eine Zuordnungsfunktion für die Kategorie bereit. Wenn also die Kategorieseite geladen wird, laden wir nur Attribute dieser Kategorie.
Die Create()-Funktion muss überschrieben werden, um eine dynamische Anfrage basierend auf der Kategoriesuchseite zu erstellen, wobei die Kategorie-ID oder die Marken-ID oder die Verkäufer-ID übergeben werden.

Laut Magento-Dokumentation beträgt das Limit für Produktattribute 2000, wobei 500 filterbar sind. Mehr als 500 oder mehr als 10.000 Produktattribute führen zu mehreren Leistungseinbußen in der Storefront und im Magento-Adminbereich (einschließlich des gemeldeten Problems).
Zusammenfassend sollten die folgenden Best Practices beim Umgang mit einer großen Anzahl von Produktattributen beachtet werden:
- Verwenden Sie unterschiedliche Produktvorlagen (Attributsätze) für unterschiedliche Produkte.
- Im Magento Admin gibt es ein Feld „Use in Product Listing“. Aktivieren Sie nur die Attribute, die wir auf der Kategorieseite aktivieren möchten
- Nutzen Sie benutzerdefinierte Optionen und komplexe Produkte für das Variationsmanagement
- Minimieren Sie die Anzahl der durchsuchbaren Attribute
- Entfernen Sie ungenutzte Produkteigenschaften.
- Speichern und verwalten Sie nicht handelsbezogene Attribute in externen PMS-Systemen
Während diese Lösungen als Workarounds für das eigentliche Problem eingeführt wurden, müssen E-Commerce-Plattformen langfristig skalieren, um diese Herausforderungen zu bewältigen, die sich aus den ständig wachsenden Mengen an Produktdaten ergeben, die mit Online-Marktplätzen einhergehen.
Bei McFadyen Digital entwickeln wir seit über 15 Jahren Online-Marktplätze und sind ständig verfügbaren Plattformen ausgesetzt. Unsere Technologieservices für Marktplatzbetreiber umfassen Architekturüberprüfung, Anbieteranalyse, Implementierung und mehr. Um mehr zu erfahren, besuchen Sie unsere Marktplatz-Technologielösungen. Weitere Informationen zu allem, was Sie zum Erstellen und Verwalten eines benutzerdefinierten E-Commerce-Shops benötigen. Besuchen Sie https://devdocs.magento.com/
Über den Autor
Sharada Rao ist Senior Software Engineer bei McFadyen Digital. Sie liebt es, neue Technologien zu lernen und zu implementieren. Als begeisterte Reisende und Gastronomin erkundet Sharada gerne neue Orte. Sie lebt mit ihrem Mann und ihrem 11 Monate alten Sohn in Bengaluru. Während ihrer Zeit bei McFadyen Digital war sie an einigen großen Implementierungsprojekten für E-Commerce/Marktplätze beteiligt.