Gestionarea atribuirii de volum mare cu Magento 2
Publicat: 2022-08-30Gestionarea atribuirii de volum mare cu Magento 2
Extinderea capabilităților Magento 2 pentru a accepta un număr mare de atribute totale (mai mare de 10.000) și un număr mare de atribute per set de atribute (mai mare de 1000 pe set)
Introducere
Piețele online au reprezentat 67% din comerțul electronic global în 2021. 3,23 trilioane de dolari au fost cheltuiți la nivel global pe primele 100 de piețe online. Piața Walmart are peste 100.000 de vânzători, în timp ce Amazon vinde aproape 350 de milioane de produse pe piața sa. Platformele tradiționale de comerț electronic trebuie să se extindă foarte rapid pentru a procesa volumele imense de date pe care trebuie să le gestioneze acum.
Pe măsură ce tot mai mulți vânzători sunt introduși pe piață, sortimentul de produse oferite crește. Acest lucru provoacă provocări unice în clasificarea acestor produse fără a afecta performanța generală și ușurința de utilizare. O astfel de provocare cu care s-a confruntat echipa McFadyen Digital în timpul unei implementări recente pe piață a fost gestionarea numeroaselor atribute ale produsului care vin cu produsele vânzătorului.
Am implementat o piață B2B pe Magento și Webkul pentru unul dintre clienții noștri din SUA care vinde produse industriale de prindere. Pe măsură ce au fost incluși mai mulți vânzători, sortimentul de produse a crescut, la fel și numărul de atribute unice de produs aduse de fiecare. Numărul atributului a depășit ceea ce recomandă Magento și ne-am confruntat cu probleme semnificative de performanță. Experții noștri tehnici au efectuat o analiză detaliată a problemei și au reușit să pună în aplicare câteva soluții pentru a gestiona situația. Vom discuta câteva dintre acestea în acest blog.
.
Import de produs:
Magento recomandă împărțirea multor atribute în mai multe seturi de atribute. Dar, dacă și numărul de seturi de atribute devine mare, acesta are un impact negativ asupra performanței produsului și importului de atribute. Acest lucru se întâmplă deoarece Magento preîncărcă toate atributele și seturile de atribute în memorie. De exemplu, să presupunem că există 1000 de seturi de atribute și importăm doar un subset de produse. În acest caz, Magento încă încarcă toate atributele și seturile de atribute disponibile, ceea ce crește consumul de memorie, crescând astfel timpul procesului de import. La importul de produse, este apelată metoda de init AbstractType , care încarcă toate atributele disponibile în baza de date a produselor. Mai întâi, toate atributele sunt încărcate, apoi seturile de atribute, iar acestea sunt apoi aranjate pe baza id-ului atributului..
vendor/magento/module-catalog-import-export/Model/Import/Product/Type/AbstractType

Soluţie:
Soluția simplă pentru această problemă este să încărcați numai setul de atribute /produse necesare din fișierul CSV implicit, în loc să încercați să faceți un import complet. De exemplu, să presupunem că încercăm să importăm o singură categorie de produse. În acest caz, încărcăm atribute numai din acea categorie și nu restul atributelor/seturi de atribute în memorie.
Pentru aceasta, suprascriem metoda init a tipului de import simplu, după cum urmează::

Acest lucru ne-a ajutat să îmbunătățim performanța în mod remarcabil și timpul necesar pentru import a fost redus cu aproape 30%.
Lista de produse:
În timp ce vizitează orice pagină de categorie, Magento transmite toate datele despre atribute către Elastic Search pentru a prelua detaliile despre categorii și agregare. Multe atribute duc la un consum mare de memorie, ducând la degradarea performanței.
Clasa FilterableAttributeList va încărca toate atributele și seturile de atribute dintr-o categorie, chiar dacă avem doar un subset de atribute necesare pentru a filtra pe categoria specifică.
vendor/magento/module-catalog/Model/Layer/Category/ FilterableAttributeList
Când ne conectăm cu Elastic Search, cererea trebuie să fie construită cu doi parametri, cum ar fi ceea ce facem în MySQL în timp ce creăm o interogare,
- Parametru de potrivire
- Agregare, care aduce toate datele de care avem nevoie
Magento folosește agregarea ca navigare pe strat și returnează toate datele, astfel încât numărul de agregare va crește atunci când avem o cantitate mare de date. Acest lucru va afecta Elastic Search atunci când încercăm să obținem mai multe date de agregare într-o singură interogare.

Acest lucru poate cauza, de asemenea, probleme cu indexarea în tabelele de entități plate. Tabelele de entități plate nu sunt per set de atribute și, prin urmare, sunt o agregare a tuturor atributelor care pot rula în limitele maxime ale coloanelor MySQL.
Începând cu MySQL 5.6.9, numărul maxim de coloane este 1017, ceea ce va face ca pagina de editare a produsului administrată să fie accesată cu crawlere inutilizabilă, provocând un impact grav asupra redării produselor pe front-end.

Cum funcționează Magento:
Magento încarcă metadatele atributului și apoi valoarea pentru acel atribut. Entitățile vor trebui să stocheze aceste informații în memorie. Cu toate acestea, deoarece metadatele atributelor sunt stocate în memoria cache Magento, cele mai grave efecte ar fi observate la încărcarea primei pagini.

Din nou, KnockoutJS nu este proiectat pentru performanțe ridicate.
Soluţie:
Deoarece Magento încearcă să treacă toate atributele unei singure categorii, suprascrieți generatorul de cereri, restrângeți-le la cele specifice legate de categorie și furnizați o funcție de mapare a categoriei. Deci, ori de câte ori se încarcă pagina categoriei, încărcăm numai atributele categoriei respective.
Funcția Creare () trebuie să fie înlocuită pentru a crea o solicitare dinamică bazată pe pagina de căutare a categoriilor, trecând ID-ul categoriei sau ID-ul mărcii sau ID-ul vânzătorului.

Conform documentației Magento, limita pentru atributele produsului este 2000 cu 500 filtrabile. Mai mult de 500 sau mai mult de 10.000 de atribute de produs introduc mai multe degradări de performanță în vitrina și administratorul Magento (inclusiv problema raportată).
În concluzie, următoarele bune practici ar trebui să fie reținute atunci când manipulați un număr mare de atribute ale produsului:
- Utilizați diferite șabloane de produse (seturi de atribute) pentru diferite produse.
- În Magento Admin, există un câmp „Utilizați în lista de produse”. Activați numai acele atribute pe care intenționăm să le activăm pe pagina categoriei
- Utilizați opțiuni personalizate și produse complexe pentru gestionarea variațiilor
- Minimizați numărul de atribute care pot fi căutate
- Îndepărtați proprietățile produsului neutilizate.
- Stocați și gestionați atributele care nu sunt legate de comerț în sisteme PMS externe
În timp ce aceste soluții au fost introduse ca soluții la problema actuală, pe termen lung, platformele de comerț electronic vor trebui să se extindă pentru a aborda aceste provocări reprezentate de volumele tot mai mari de date despre produse care vin cu piețele online.
La McFadyen Digital, dezvoltăm piețe online de peste 15 ani și suntem expuși în mod constant platformelor disponibile. Serviciile noastre tehnologice pentru operatorii pieței includ revizuirea arhitecturii, analiza furnizorilor, implementarea și multe altele. Pentru a afla mai multe, vizitați soluțiile noastre tehnologice de piață. Pentru mai multe informații despre tot ce aveți nevoie pentru a construi și gestiona un magazin Commerce personalizat. Vizitați https://devdocs.magento.com/
Despre autor
Sharada Rao este inginer senior de software la McFadyen Digital. Îi place să învețe și să implementeze noi tehnologii. Un călător pasionat și un gastronomic, lui Sharada îi place să exploreze locuri noi. Ea rămâne cu soțul și fiul ei de 11 luni în Bengaluru. În timpul perioadei sale cu McFadyen Digital, ea a făcut parte din câteva proiecte de implementare a pieței/eCommerce.