Gérer l'attribution de gros volumes avec Magento 2

Publié: 2022-08-30

Gérer l'attribution de gros volumes avec Magento 2

Extension des capacités de Magento 2 pour prendre en charge un grand nombre d'attributs totaux (supérieur à 10 000) et un grand nombre d'attributs par ensemble d'attributs (supérieur à 1 000 par ensemble)

Introduction

Les places de marché en ligne représentaient 67 % du commerce électronique mondial en 2021. 3,23 billions de dollars ont été dépensés dans le monde sur les 100 premières places de marché en ligne. Le marché de Walmart compte plus de 100 000 vendeurs, tandis qu'Amazon vend près de 350 millions de produits sur son marché. Les plates-formes de commerce électronique traditionnelles doivent évoluer très rapidement pour traiter les énormes volumes de données qu'elles doivent désormais gérer.

À mesure que de plus en plus de vendeurs sont intégrés au marché, l'assortiment de produits proposés augmente. Cela pose des défis uniques dans la catégorisation de ces produits sans affecter les performances globales et la facilité d'utilisation. L'un de ces défis auxquels l'équipe McFadyen Digital a été confrontée lors d'une récente mise en œuvre du marché consistait à gérer les nombreux attributs de produit fournis avec les produits des vendeurs.

Nous avons mis en place une place de marché B2B sur Magento et Webkul pour l'un de nos clients aux États-Unis vendant des produits de fixation industriels. Au fur et à mesure que de plus en plus de vendeurs étaient intégrés, l'assortiment de produits augmentait, tout comme le nombre d'attributs de produit uniques apportés par chacun. Le nombre d'attributs dépassait ce que Magento recommande, et nous avons rencontré des problèmes de performances importants. Nos experts techniques ont effectué une analyse détaillée du problème et ont pu mettre en place des solutions de contournement pour gérer la situation. Nous en discuterons quelques-uns dans ce blog.

.

Importation de produits :

Magento recommande de diviser de nombreux attributs en plusieurs ensembles d'attributs. Mais, si le nombre d'ensembles d'attributs devient également important, cela a un impact négatif sur les performances du produit et l'importation des attributs. Cela se produit parce que Magento précharge tous les attributs et ensembles d'attributs en mémoire. Par exemple, supposons qu'il existe 1 000 ensembles d'attributs et que nous importions uniquement un sous-ensemble de produits. Dans ce cas, Magento charge toujours tous les attributs et ensembles d'attributs disponibles, ce qui augmente la consommation de mémoire, augmentant ainsi le temps de processus d'importation. Lors de l'importation de produits, la méthode init AbstractType est appelée, qui charge tous les attributs disponibles dans la base de données des produits. Tout d'abord, tous les attributs sont chargés, puis les ensembles d'attributs, et ceux-ci sont ensuite organisés en fonction de l'identifiant de l'attribut.

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

La solution:

La solution simple à ce problème consiste à charger uniquement l'ensemble d'attributs /products requis à partir du fichier CSV par défaut au lieu d'essayer d'effectuer une importation complète. Par exemple, supposons que nous essayons d'importer une seule catégorie de produits. Dans ce cas, nous chargeons uniquement les attributs de cette catégorie et non le reste des attributs/ensembles d'attributs en mémoire.

Pour cela, nous redéfinissons la méthode init du type Simple Import comme ci-dessous :

Cela nous a permis d'améliorer considérablement les performances et le temps nécessaire à l'importation a été réduit de près de 30 %.

Liste de produits :

Lors de la visite d'une page de catégorie, Magento transmet toutes les données d'attribut à Elastic Search pour récupérer les détails de la catégorie et de l'agrégation. De nombreux attributs entraînent une consommation de mémoire élevée, entraînant une dégradation des performances.

La classe FilterableAttributeList chargera tous les attributs et ensembles d'attributs dans une catégorie même si nous n'avons qu'un sous-ensemble d'attributs requis pour filtrer sur la catégorie spécifique.

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

Lorsque nous nous connectons avec Elastic Search, la requête doit être construite avec deux paramètres, comme ce que nous faisons dans MySQL lors de la création d'une requête,

  1. Paramètre de correspondance
  2. Agrégation, qui rassemble toutes les données dont nous avons besoin

Magento utilise l'agrégation comme navigation de couche et renvoie toutes les données, de sorte que le nombre d'agrégations augmentera lorsque nous aurons une grande quantité de données. Cela aura un impact sur Elastic Search lorsque nous essaierons d'obtenir plus de données d'agrégation dans une seule requête.

Cela peut également entraîner des problèmes d'indexation dans les tables d'entités plates. Les tables d'entités plates ne sont pas définies par ensemble d'attributs et constituent donc une agrégation de tous les attributs pouvant atteindre les limites maximales de colonnes MySQL.

Depuis MySQL 5.6.9, le nombre maximum de colonnes est de 1017, ce qui fera de la page d'édition du produit d'administration une analyse inutilisable, ce qui aura un impact important sur le rendu des produits sur le front-end.

Comment fonctionne Magento :

Magento charge les métadonnées d'attribut, puis la valeur de cet attribut. Les entités devront stocker ces informations en mémoire. Cependant, comme les métadonnées d'attribut sont stockées dans le cache de Magento, les pires effets seraient observés lors du chargement de la première page.

Encore une fois, KnockoutJS n'est pas conçu pour des performances élevées.

La solution:

Étant donné que Magento essaie de transmettre tous les attributs d'une seule catégorie, remplacez le générateur de requêtes, limitez-vous à ceux spécifiques liés à la catégorie et fournissez une fonctionnalité de mappage à la catégorie. Ainsi, chaque fois que la page de catégorie se charge, nous ne chargeons que les attributs de cette catégorie.

La fonction Create () doit être remplacée pour créer une demande dynamique basée sur la page de recherche de catégorie, en transmettant l'ID de catégorie ou l'ID de marque ou l'ID de vendeur.

Selon la documentation de Magento, la limite des attributs de produit est de 2000 avec 500 filtrables. Plus de 500 ou plus de 10 000 attributs de produit introduisent plusieurs dégradations des performances dans la vitrine et l'administrateur Magento (y compris le problème signalé).

En résumé, les meilleures pratiques suivantes doivent être gardées à l'esprit lors de la gestion d'un grand nombre d'attributs de produit :

  • Utilisez différents modèles de produit (ensembles d'attributs) pour différents produits.
  • Dans Magento Admin, il y a un champ "Utiliser dans la liste des produits". Activez uniquement les attributs que nous prévoyons d'activer sur la page de catégorie
  • Tirez parti des options personnalisées et des produits complexes pour la gestion des variantes
  • Minimiser le nombre d'attributs interrogeables
  • Supprimez les propriétés de produit inutilisées.
  • Stocker et gérer les attributs non liés au commerce dans des systèmes PMS externes

Bien que ces solutions aient été introduites pour contourner le problème réel, à long terme, les plateformes de commerce électronique devront évoluer pour relever les défis posés par les volumes toujours croissants de données sur les produits qui accompagnent les places de marché en ligne.

Chez McFadyen Digital, nous développons des marchés en ligne depuis plus de 15 ans et sommes constamment exposés aux plateformes disponibles. Nos services technologiques pour les opérateurs de places de marché comprennent l'examen de l'architecture, l'analyse des fournisseurs, la mise en œuvre, etc. Pour en savoir plus, visitez nos solutions technologiques de marché. Pour plus d'informations sur tout ce dont vous avez besoin pour créer et gérer une boutique Commerce personnalisée. Visitez https://devdocs.magento.com/

A propos de l'auteur

Sharada Rao est ingénieur logiciel senior chez McFadyen Digital. Elle aime apprendre et mettre en œuvre de nouvelles technologies. Voyageuse passionnée et gastronome, Sharada aime explorer de nouveaux endroits. Elle vit avec son mari et son fils de 11 mois à Bangalore. Au cours de son passage chez McFadyen Digital, elle a participé à des projets de mise en œuvre de commerce électronique / marché à gros budget.