Manejo de la atribución de gran volumen con Magento 2

Publicado: 2022-08-30

Manejo de la atribución de gran volumen con Magento 2

Extender las capacidades de Magento 2 para admitir una gran cantidad de atributos totales (más de 10,000) y una gran cantidad de atributos por conjunto de atributos (más de 1000 por conjunto)

Introducción

Los mercados en línea representaron el 67 % del comercio electrónico mundial en 2021. Se gastaron $3,23 billones a nivel mundial en los 100 principales mercados en línea. El mercado de Walmart tiene más de 100 000 vendedores, mientras que Amazon vende cerca de 350 millones de productos en su mercado. Las plataformas de comercio electrónico tradicionales deben escalar muy rápido para procesar los tremendos volúmenes de datos que ahora necesitan manejar.

A medida que más y más vendedores se incorporan al mercado, la variedad de productos que se ofrecen aumenta. Esto provoca desafíos únicos en la categorización de estos productos sin afectar el rendimiento general y la facilidad de uso. Uno de esos desafíos que enfrentó el equipo de McFadyen Digital durante una implementación reciente en el mercado fue el manejo de los numerosos atributos del producto que venían con los productos del vendedor.

Implementamos un mercado B2B en Magento y Webkul para uno de nuestros clientes en los EE. UU. que vende productos de fijación industrial. A medida que se incorporaron más vendedores, la variedad de productos aumentó, al igual que la cantidad de atributos de productos únicos que cada uno trajo. El número de atributo superó lo que recomienda Magento y nos enfrentamos a importantes problemas de rendimiento. Nuestros expertos técnicos llevaron a cabo un análisis detallado del problema y pudieron implementar algunas soluciones para manejar la situación. Discutiremos un par de ellos en este blog.

.

Importación de productos:

Magento recomienda dividir muchos atributos en varios conjuntos de atributos. Pero, si la cantidad de conjuntos de atributos también aumenta, afecta negativamente el rendimiento del producto y la importación de atributos. Esto sucede porque Magento precarga todos los atributos y conjuntos de atributos en la memoria. Por ejemplo, supongamos que hay 1000 conjuntos de atributos e importamos solo un subconjunto de productos. En ese caso, Magento aún carga todos los atributos y conjuntos de atributos disponibles, lo que aumenta el consumo de memoria y, por lo tanto, aumenta el tiempo del proceso de importación. Al importar productos, se llama al método init AbstractType , que carga todos los atributos disponibles en la base de datos del producto. Primero, se cargan todos los atributos, luego los conjuntos de atributos, y estos se organizan en función de la identificación del atributo.

proveedor/magento/módulo-catálogo-importación-exportación/Modelo/Importación/Producto/Tipo/AbstractType

Solución:

La solución sencilla para este problema es cargar solo el conjunto de atributos/productos necesarios del archivo CSV predeterminado en lugar de intentar realizar una importación completa. Por ejemplo, supongamos que estamos tratando de importar una sola categoría de productos. En ese caso, cargamos atributos solo de esa categoría y no el resto de atributos/conjuntos de atributos en la memoria.

Para esto, anulamos el método init del tipo Importación simple como se muestra a continuación:

Esto nos ayudó a mejorar notablemente el rendimiento y el tiempo de importación se redujo en casi un 30%.

Listado de productos:

Al visitar cualquier página de categoría, Magento pasa todos los datos de atributos a Elastic Search para recuperar la categoría y los detalles de agregación. Muchos atributos conducen a un alto consumo de memoria, lo que resulta en una degradación del rendimiento.

La clase FilterableAttributeList cargará todos los atributos y conjuntos de atributos en una categoría incluso si solo tenemos un subconjunto de atributos necesarios para filtrar en la categoría específica.

proveedor/magento/módulo-catálogo/Modelo/Capa/Categoría/ FilterableAttributeList

Cuando nos conectamos con Elastic Search, la solicitud debe construirse con dos parámetros, como lo que hacemos en MySQL al crear una consulta,

  1. Parámetro de coincidencia
  2. Agregación, que trae todos los datos que requerimos

Magento usa la agregación como capa de navegación y devuelve todos los datos, por lo que el recuento de agregación aumentará cuando tengamos una gran cantidad de datos. Esto afectará a Elastic Search cuando intentemos obtener más datos agregados en una sola consulta.

Esto también puede causar problemas con la indexación en las tablas de entidades planas. Las tablas de entidades planas no son por conjunto de atributos y, por lo tanto, son una agregación de todos los atributos que pueden ejecutarse en los límites máximos de columnas de MySQL.

A partir de MySQL 5.6.9, el número máximo de columnas es 1017, lo que hará que la página de edición del producto de administración sea un rastreo inutilizable que cause un impacto severo en la representación de los productos en el front-end.

Cómo funciona Magento:

Magento carga los metadatos del atributo y luego el valor de ese atributo. Las entidades tendrán que almacenar esta información en la memoria. Sin embargo, debido a que los metadatos de atributos se almacenan en el caché de Magento, los peores efectos se verían en la carga de la primera página.

Una vez más, KnockoutJS no está diseñado para un alto rendimiento.

Solución:

Dado que Magento intenta pasar todos los atributos de una sola categoría, anule el generador de solicitudes, limite los específicos relacionados con la categoría y proporcione una función de mapeo a la categoría. Entonces, cada vez que se carga la página de categoría, cargamos solo los atributos de esa categoría.

La función Crear () debe anularse para crear una solicitud dinámica basada en la página de búsqueda de categoría, pasando el ID de categoría, el ID de marca o el ID de vendedor.

Según la documentación de Magento, el límite para los atributos del producto es 2000 con 500 filtrables. Más de 500 o más de 10 000 atributos de productos introducen varias degradaciones de rendimiento en el escaparate y en el administrador de Magento (incluido el problema informado).

En resumen, se deben tener en cuenta las siguientes mejores prácticas al manejar una gran cantidad de atributos del producto:

  • Use diferentes plantillas de productos (conjuntos de atributos) para diferentes productos.
  • En Magento Admin, hay un campo "Usar en la lista de productos". Habilite solo aquellos atributos que planeamos habilitar en la página de categoría
  • Aproveche las opciones personalizadas y los productos complejos para la gestión de variaciones
  • Minimizar el número de atributos de búsqueda
  • Eliminar las propiedades del producto no utilizadas.
  • Almacene y administre atributos no relacionados con el comercio en sistemas PMS externos

Si bien estas soluciones se introdujeron como soluciones alternativas al problema real, a largo plazo, las plataformas de comercio electrónico tendrán que ampliarse para abordar estos desafíos que plantean los volúmenes cada vez mayores de datos de productos que vienen con los mercados en línea.

En McFadyen Digital, hemos estado desarrollando mercados en línea durante más de 15 años y estamos constantemente expuestos a las plataformas disponibles. Nuestros servicios de tecnología para operadores de mercado incluyen revisión de arquitectura, análisis de proveedores, implementación y más. Para saber más, visite nuestro mercado de soluciones tecnológicas. Para obtener más información sobre todo lo que necesita para crear y administrar una tienda Commerce personalizada. Visite https://devdocs.magento.com/

Sobre el Autor

Sharada Rao es ingeniera de software sénior en McFadyen Digital. Le gusta aprender e implementar nuevas tecnologías. Una ávida viajera y gastrónomo, Sharada le gusta explorar nuevos lugares. Ella se queda con su esposo y su hijo de 11 meses en Bangalore. Durante su paso por McFadyen Digital, formó parte de algunos proyectos importantes de implementación de mercados y comercio electrónico.