Obsługa atrybucji dużego wolumenu za pomocą Magento 2
Opublikowany: 2022-08-30Obsługa atrybucji dużego wolumenu za pomocą Magento 2
Rozszerzenie możliwości Magento 2 o obsługę dużej liczby wszystkich atrybutów (powyżej 10 000) i dużej liczby atrybutów na zestaw atrybutów (powyżej 1000 na zestaw)
Wstęp
Internetowe platformy handlowe stanowiły 67% globalnego handlu elektronicznego w 2021 r. Na całym świecie na 100 największych internetowych platform handlowych wydano 3,23 biliona dolarów. Rynek Walmart ma ponad 100 000 sprzedawców, podczas gdy Amazon sprzedaje na swoim rynku blisko 350 milionów produktów. Tradycyjne platformy handlu elektronicznego muszą bardzo szybko się skalować, aby przetwarzać ogromne ilości danych, które muszą teraz obsłużyć.
Ponieważ coraz więcej sprzedawców jest wprowadzanych na rynek, zwiększa się asortyment oferowanych produktów. Stwarza to wyjątkowe wyzwania w kategoryzacji tych produktów bez wpływu na ogólną wydajność i łatwość użytkowania. Jednym z takich wyzwań, przed jakim stanął zespół McFadyen Digital podczas niedawnego wdrożenia na rynku, była obsługa licznych atrybutów produktów dołączonych do produktów sprzedawców.
Wdrożyliśmy rynek B2B na Magento i Webkul dla jednego z naszych klientów w USA sprzedającego przemysłowe produkty mocujące. Wraz ze wzrostem liczby sprzedawców zwiększał się asortyment produktów, a także liczba unikalnych atrybutów produktów, które każdy z nich przyniósł. Liczba atrybutów przekroczyła zalecenia Magento i napotkaliśmy poważne problemy z wydajnością. Nasi eksperci techniczni przeprowadzili szczegółową analizę problemu i byli w stanie wprowadzić pewne obejścia, aby poradzić sobie z sytuacją. Kilka z nich omówimy na tym blogu.
.
Import produktów:
Magento zaleca podzielenie wielu atrybutów na wiele zestawów atrybutów. Jeśli jednak liczba zestawów atrybutów również się zwiększy, negatywnie wpłynie to na wydajność importu produktu i atrybutów. Dzieje się tak, ponieważ Magento wstępnie ładuje wszystkie atrybuty i zestawy atrybutów do pamięci. Załóżmy na przykład, że istnieje 1000 zestawów atrybutów i importujemy tylko podzbiór produktów. W takim przypadku Magento nadal ładuje wszystkie dostępne atrybuty i zestawy atrybutów, co zwiększa zużycie pamięci, a tym samym wydłuża czas procesu importu. Podczas importowania produktów wywoływana jest metoda init AbstractType , która ładuje wszystkie atrybuty dostępne w bazie danych produktów. Najpierw ładowane są wszystkie atrybuty, następnie zestawy atrybutów, które są następnie porządkowane na podstawie identyfikatora atrybutu..
sprzedawca/magento/moduł-katalog-import-eksport/Model/Import/Produkt/Typ/AbstractType

Rozwiązanie:
Łatwym obejściem tego problemu jest załadowanie tylko zestawu atrybutów /produktów wymaganych z domyślnego pliku CSV zamiast próby wykonania pełnego importu. Załóżmy na przykład, że próbujemy zaimportować jedną kategorię produktów. W takim przypadku ładujemy tylko atrybuty z tej kategorii, a nie resztę zestawów atrybutów /attributes do pamięci.
W tym celu nadpisujemy metodę init typu Simple Import jak poniżej:

Pomogło nam to znacząco poprawić wydajność, a czas importu został skrócony o prawie 30%.
Lista produktów:
Podczas odwiedzania dowolnej strony kategorii, Magento przekazuje wszystkie dane atrybutów do Elastic Search w celu pobrania szczegółów kategorii i agregacji. Wiele atrybutów prowadzi do dużego zużycia pamięci, co skutkuje pogorszeniem wydajności..
Klasa FilterableAttributeList załaduje wszystkie atrybuty i zestawy atrybutów w kategorii, nawet jeśli mamy tylko podzbiór atrybutów wymaganych do filtrowania w określonej kategorii.
Dostawca/magento/katalog-modułów/Model/Warstwa/Kategoria/Lista atrybutów do filtrowania
Kiedy łączymy się z Elastic Search, żądanie musi być zbudowane z dwoma parametrami, jak to, co robimy w MySQL podczas tworzenia zapytania,
- Dopasuj parametr
- Agregacja, która dostarcza wszystkie potrzebne nam dane
Magento wykorzystuje agregację jako nawigację po warstwie i zwraca wszystkie dane, więc liczba agregacji wzrośnie, gdy mamy dużą ilość danych. Wpłynie to na Elastic Search, gdy spróbujemy zebrać więcej danych agregacji w jednym zapytaniu.

Może to również powodować problemy z indeksowaniem w płaskich tabelach encji. Płaskie tabele encji nie są przypisane do zestawu atrybutów, a zatem są agregacją wszystkich atrybutów, które mogą działać w maksymalnych limitach kolumn MySQL.
Od MySQL 5.6.9 maksymalna liczba kolumn wynosi 1017, co spowoduje, że strona edycji produktu administratora będzie bezużyteczna, co ma poważny wpływ na renderowanie produktów w interfejsie użytkownika.

Jak działa Magento:
Magento ładuje metadane atrybutu, a następnie wartość tego atrybutu. Jednostki będą musiały przechowywać te informacje w pamięci. Ponieważ jednak metadane atrybutów są przechowywane w pamięci podręcznej Magento, najgorsze efekty byłyby widoczne przy wczytaniu pierwszej strony.

Ponownie, KnockoutJS nie jest przeznaczony do wysokiej wydajności..
Rozwiązanie:
Ponieważ Magento próbuje przekazać wszystkie atrybuty jednej kategorii, zastąp konstruktora żądań, zawęź do konkretnych atrybutów związanych z kategorią i zapewnij funkcję mapowania do kategorii. Tak więc za każdym razem, gdy ładuje się strona kategorii, ładujemy tylko atrybuty tej kategorii.
Funkcja Create () musi zostać zastąpiona, aby utworzyć dynamiczne żądanie na podstawie strony wyszukiwania kategorii, przekazując identyfikator kategorii, identyfikator marki lub identyfikator sprzedawcy.

Zgodnie z dokumentacją Magento limit atrybutów produktu wynosi 2000 z 500 możliwymi do filtrowania. Ponad 500 lub ponad 10 000 atrybutów produktu powoduje kilka spadków wydajności w witrynie sklepowej i administratorze Magento (w tym zgłoszony problem).
Podsumowując, podczas obsługi dużej liczby atrybutów produktów należy pamiętać o następujących dobrych praktykach:
- Używaj różnych szablonów produktów (zestawów atrybutów) dla różnych produktów.
- W Magento Admin znajduje się pole „Użyj na liście produktów”. Włącz tylko te atrybuty, które planujemy włączyć na stronie kategorii
- Wykorzystaj niestandardowe opcje i złożone produkty do zarządzania odmianami
- Zminimalizuj liczbę przeszukiwalnych atrybutów
- Usuń nieużywane właściwości produktu.
- Przechowuj i zarządzaj atrybutami niezwiązanymi z handlem w zewnętrznych systemach PMS
Chociaż te rozwiązania zostały wprowadzone jako obejście rzeczywistego problemu, w dłuższej perspektywie platformy eCommerce będą musiały się skalować, aby sprostać wyzwaniom stawianym przez stale rosnące ilości danych o produktach, które są dostarczane z internetowymi platformami rynkowymi.
W McFadyen Digital od ponad 15 lat rozwijamy rynki internetowe i stale korzystamy z dostępnych platform. Nasze usługi technologiczne dla operatorów marketplace obejmują przegląd architektury, analizę dostawców, implementację i nie tylko. Aby dowiedzieć się więcej, odwiedź nasze rozwiązania technologiczne na rynku. Aby uzyskać więcej informacji na temat wszystkiego, czego potrzebujesz, aby zbudować dostosowany sklep Commerce i zarządzać nim. Odwiedź https://devdocs.magento.com/
o autorze
Sharada Rao jest starszym inżynierem oprogramowania w McFadyen Digital. Lubi uczyć się i wdrażać nowe technologie. Sharada, zapalony podróżnik i gastronomia, lubi odkrywać nowe miejsca. Mieszka z mężem i 11 miesięcznym synem w Bengaluru. Podczas swojej pracy w McFadyen Digital brała udział w kilku dużych projektach wdrożeniowych eCommerce / marketplace.