Gestire l'attribuzione ad alto volume con Magento 2

Pubblicato: 2022-08-30

Gestire l'attribuzione ad alto volume con Magento 2

Estensione delle capacità di Magento 2 per supportare un numero elevato di attributi totali (maggiore di 10.000) e un numero elevato di attributi per set di attributi (maggiore di 1000 per set)

introduzione

I mercati online hanno rappresentato il 67% dell'e-commerce globale nel 2021. $ 3,23 trilioni sono stati spesi a livello globale nei primi 100 mercati online. Il mercato di Walmart ha oltre 100.000 venditori, mentre Amazon vende quasi 350 milioni di prodotti sul suo mercato. Le piattaforme di eCommerce tradizionali devono aumentare molto rapidamente per elaborare gli enormi volumi di dati che ora devono gestire.

Man mano che sempre più venditori vengono inseriti nel mercato, l'assortimento di prodotti offerti aumenta. Ciò causa sfide uniche nella categorizzazione di questi prodotti senza influire sulle prestazioni complessive e sulla facilità d'uso. Una di queste sfide che il team di McFadyen Digital ha dovuto affrontare durante una recente implementazione sul mercato è stata la gestione dei numerosi attributi dei prodotti forniti con i prodotti del venditore.

Abbiamo implementato un mercato B2B su Magento e Webkul per uno dei nostri clienti negli Stati Uniti che vende prodotti di fissaggio industriale. Con l'integrazione di più venditori, l'assortimento di prodotti è aumentato, così come il numero di attributi di prodotto unici portati da ciascuno. Il numero di attributo ha superato quanto raccomandato da Magento e abbiamo riscontrato problemi di prestazioni significativi. I nostri esperti tecnici hanno svolto un'analisi dettagliata del problema e sono stati in grado di mettere in atto alcune soluzioni alternative per gestire la situazione. Ne discuteremo un paio in questo blog.

.

Importazione del prodotto:

Magento consiglia di dividere molti attributi in più set di attributi. Tuttavia, se anche il numero di set di attributi diventa elevato, ciò incide negativamente sulle prestazioni del prodotto e sull'importazione degli attributi. Ciò accade perché Magento precarica tutti gli attributi e i set di attributi in memoria. Ad esempio, supponiamo che ci siano 1000 set di attributi e importiamo solo un sottoinsieme di prodotti. In tal caso, Magento carica comunque tutti gli attributi e i set di attributi disponibili, il che aumenta il consumo di memoria, aumentando così il tempo del processo di importazione. Quando si importano prodotti, viene chiamato il metodo init AbstractType , che carica tutti gli attributi disponibili nel database del prodotto. Innanzitutto, vengono caricati tutti gli attributi, quindi i set di attributi e questi vengono quindi organizzati in base all'ID attributo..

vendor/magento/module-catalog-import-export/Model/Import/Product/Type/AbstractType

Soluzione:

La soluzione più semplice per questo problema consiste nel caricare solo il set di attributi /prodotti richiesto dal file CSV predefinito invece di tentare di eseguire un'importazione completa. Ad esempio, supponiamo di provare a importare una singola categoria di prodotti. In tal caso, carichiamo gli attributi solo da quella categoria e non il resto degli attributi /attributi impostati in memoria.

Per questo, sovrascriviamo il metodo init del tipo Simple Import come di seguito::

Questo ci ha aiutato a migliorare notevolmente le prestazioni e il tempo impiegato per l'importazione è stato ridotto di quasi il 30%.

Elenco dei prodotti:

Durante la visita a qualsiasi pagina di categoria, Magento passa tutti i dati degli attributi a Ricerca elastica per recuperare i dettagli di categoria e aggregazione. Molti attributi portano a un elevato consumo di memoria, con conseguente degrado delle prestazioni.

La classe FilterableAttributeList caricherà tutti gli attributi e gli insiemi di attributi in una categoria anche se abbiamo solo un sottoinsieme di attributi necessari per filtrare sulla categoria specifica..

vendor/magento/module-catalog/Model/Layer/Category/ FilterableAttributeList

Quando ci colleghiamo con Elastic Search, la richiesta deve essere compilata con due parametri, come quello che facciamo in MySQL durante la creazione di una query,

  1. Parametro di corrispondenza
  2. Aggregazione, che porta tutti i dati di cui abbiamo bisogno

Magento usa l'aggregazione come navigazione dei livelli e restituisce tutti i dati, quindi il conteggio delle aggregazioni aumenterà quando avremo una grande quantità di dati. Ciò avrà un impatto su Elastic Search quando tenteremo di ottenere più dati di aggregazione in una singola query.

Ciò può anche causare problemi con l'indicizzazione nelle tabelle di entità flat. Le tabelle di entità flat non sono per set di attributi e quindi sono un'aggregazione di tutti gli attributi che possono essere eseguiti nei limiti massimi di colonna di MySQL.

A partire da MySQL 5.6.9, il numero massimo di colonne è 1017, il che renderà la pagina di modifica del prodotto dell'amministratore una scansione inutilizzabile causando un grave impatto sul rendering dei prodotti sul front-end.

Come funziona Magento:

Magento carica i metadati dell'attributo e quindi il valore per quell'attributo. Le entità dovranno memorizzare queste informazioni in memoria. Tuttavia, poiché i metadati degli attributi sono archiviati nella cache di Magento, gli effetti peggiori si vedrebbero sul caricamento della prima pagina.

Anche in questo caso, KnockoutJS non è progettato per prestazioni elevate..

Soluzione:

Poiché Magento cerca di passare tutti gli attributi di una singola categoria, sovrascrivere il generatore di richieste, restringere il campo a quelli specifici relativi alla categoria e fornire una funzione di mappatura alla categoria. Quindi, ogni volta che viene caricata la pagina della categoria, carichiamo solo gli attributi di quella categoria.

La funzione Crea () deve essere sovrascritta per creare una richiesta dinamica basata sulla pagina di ricerca della categoria, passando l'ID categoria o l'ID marchio o l'ID venditore.

Come da documentazione Magento, il limite per gli attributi del prodotto è 2000 con 500 filtrabili. Più di 500 o più di 10.000 attributi di prodotto introducono diversi peggioramenti delle prestazioni nella vetrina e nell'amministratore di Magento (incluso il problema segnalato).

Per riassumere, è necessario tenere a mente le seguenti best practice durante la gestione di un gran numero di attributi del prodotto:

  • Utilizza diversi modelli di prodotto (set di attributi) per prodotti diversi.
  • In Magento Admin, c'è un campo "Usa nell'elenco dei prodotti". Abilita solo gli attributi che intendiamo abilitare nella pagina delle categorie
  • Sfrutta opzioni personalizzate e prodotti complessi per la gestione delle variazioni
  • Riduci al minimo il numero di attributi ricercabili
  • Rimuovere le proprietà del prodotto non utilizzate.
  • Archivia e gestisci attributi non correlati al commercio in sistemi PMS esterni

Sebbene queste soluzioni siano state introdotte come soluzioni alternative al problema reale, a lungo termine, le piattaforme di eCommerce dovranno aumentare per affrontare queste sfide poste dai volumi sempre crescenti di dati sui prodotti che derivano dai mercati online.

In McFadyen Digital, sviluppiamo mercati online da oltre 15 anni e siamo costantemente esposti alle piattaforme disponibili. I nostri servizi tecnologici per gli operatori del mercato includono la revisione dell'architettura, l'analisi dei fornitori, l'implementazione e altro ancora. Per saperne di più, visita le nostre soluzioni tecnologiche di mercato. Per maggiori informazioni su tutto ciò che ti serve per costruire e gestire un negozio Commerce personalizzato. Visita https://devdocs.magento.com/

Circa l'autore

Sharada Rao è un Senior Software Engineer presso McFadyen Digital. Ama l'apprendimento e l'implementazione di nuove tecnologie. Avida viaggiatrice e gastronoma, Sharada ama esplorare nuovi posti. Rimane con il marito e il figlio di 11 mesi a Bengaluru. Durante il suo periodo con McFadyen Digital, ha preso parte ad alcuni progetti di implementazione di eCommerce/mercato di grandi dimensioni.