Обработка крупномасштабной атрибуции с помощью Magento 2

Опубликовано: 2022-08-30

Обработка крупномасштабной атрибуции с помощью Magento 2

Расширение возможностей Magento 2 для поддержки большого количества общих атрибутов (более 10 000) и большого количества атрибутов на набор атрибутов (более 1000 на набор)

Введение

В 2021 году на онлайн-торговые площадки приходилось 67% мировой электронной коммерции. 3,23 триллиона долларов было потрачено во всем мире на 100 ведущих онлайн-торговых площадок. Торговая площадка Walmart насчитывает более 100 000 продавцов, а Amazon продает на своей торговой площадке около 350 миллионов товаров. Традиционные платформы электронной коммерции должны очень быстро масштабироваться, чтобы обрабатывать огромные объемы данных, с которыми им необходимо работать.

По мере того, как все больше и больше продавцов выходят на рынок, ассортимент предлагаемых товаров увеличивается. Это создает уникальные проблемы при категоризации этих продуктов, не влияя на общую производительность и простоту использования. Одной из таких проблем, с которой столкнулась команда McFadyen Digital во время недавней реализации маркетплейса, была работа с многочисленными атрибутами продукта, которые поставлялись с продуктами продавца.

Мы внедрили торговую площадку B2B на Magento и Webkul для одного из наших клиентов в США, продающего промышленные крепежные изделия. По мере того, как на борт становилось больше продавцов, ассортимент товаров увеличивался, а также увеличивалось количество уникальных атрибутов продукта, которые каждый из них привносил. Количество атрибутов превысило рекомендуемое Magento, и мы столкнулись со значительными проблемами производительности. Наши технические специалисты провели детальный анализ проблемы и смогли предложить некоторые обходные пути, чтобы справиться с ситуацией. Мы обсудим пару из них в этом блоге.

.

Импорт продукта:

Magento рекомендует разделить многие атрибуты на несколько наборов атрибутов. Но если количество наборов атрибутов также становится большим, это негативно влияет на производительность импорта продукта и атрибутов. Это происходит потому, что Magento предварительно загружает в память все атрибуты и наборы атрибутов. Например, предположим, что имеется 1000 наборов атрибутов, и мы импортируем только подмножество продуктов. В этом случае Magento по-прежнему загружает все доступные атрибуты и наборы атрибутов, что увеличивает потребление памяти и, следовательно, увеличивает время процесса импорта. При импорте товаров вызывается метод init AbstractType , который загружает все атрибуты, имеющиеся в базе товаров. Сначала загружаются все атрибуты, затем наборы атрибутов, а затем они упорядочиваются на основе идентификатора атрибута.

поставщик/magento/модуль-каталог-импорт-экспорт/модель/импорт/продукт/тип/AbstractType

Решение:

Простым решением этой проблемы является загрузка только требуемого набора атрибутов /products из CSV-файла по умолчанию вместо того, чтобы пытаться выполнить полный импорт. Например, предположим, что мы пытаемся импортировать одну категорию продуктов. В этом случае мы загружаем в память атрибуты только из этой категории, а не остальные наборы атрибутов/атрибутов.

Для этого мы переопределяем метод init типа Simple Import, как показано ниже:

Это помогло нам значительно улучшить производительность, а время, необходимое для импорта, сократилось почти на 30%.

Список продуктов:

При посещении любой страницы категории Magento передает все данные атрибутов в Elastic Search для получения сведений о категории и агрегации. Многие атрибуты приводят к высокому потреблению памяти, что приводит к снижению производительности.

Класс FilterableAttributeList загрузит все атрибуты и наборы атрибутов в категории, даже если у нас есть только подмножество атрибутов, необходимых для фильтрации по конкретной категории.

поставщик/magento/модуль-каталог/модель/слой/категория/FilterableAttributeList

Когда мы подключаемся к Elastic Search, запрос должен быть построен с двумя параметрами, как мы делаем в MySQL при создании запроса:

  1. Параметр соответствия
  2. Агрегация, которая приносит все данные, которые нам нужны

Magento использует агрегацию в качестве навигации по слоям и возвращает все данные, поэтому количество агрегаций будет увеличиваться, когда у нас будет большой объем данных. Это повлияет на Elastic Search, когда мы попытаемся получить больше статистических данных в одном запросе.

Это также может вызвать проблемы с индексацией в таблицах плоских сущностей. Плоские таблицы сущностей не относятся к набору атрибутов и, таким образом, представляют собой совокупность всех атрибутов, которые могут работать с максимальными ограничениями столбцов MySQL.

Начиная с MySQL 5.6.9, максимальное количество столбцов составляет 1017, что сделает страницу редактирования продукта администратора непригодной для сканирования, что серьезно повлияет на отображение продуктов во внешнем интерфейсе.

Как работает Magento:

Magento загружает метаданные атрибута, а затем значение этого атрибута. Сущности должны будут хранить эту информацию в памяти. Однако, поскольку метаданные атрибутов хранятся в кеше Magento, наихудшие последствия будут видны при загрузке первой страницы.

Опять же, KnockoutJS не предназначен для высокой производительности.

Решение:

Поскольку Magento пытается передать все атрибуты одной категории, переопределяет построитель запросов, сужается до конкретных атрибутов, связанных с категорией, и предоставляет функцию сопоставления с категорией. Таким образом, всякий раз, когда загружается страница категории, мы загружаем только атрибуты этой категории.

Функция Create () должна быть переопределена для создания динамического запроса на основе страницы поиска категории с передачей идентификатора категории или идентификатора бренда или идентификатора продавца.

Согласно документации Magento, ограничение атрибутов продукта составляет 2000 с возможностью фильтрации 500. Более 500 или более 10 000 атрибутов продукта приводят к снижению производительности витрины магазина и администратора Magento (включая заявленную проблему).

Подводя итог, следует помнить о следующих передовых методах при работе с большим количеством атрибутов продукта:

  • Используйте разные шаблоны продуктов (наборы атрибутов) для разных продуктов.
  • В Magento Admin есть поле «Использовать в списке продуктов». Включите только те атрибуты, которые мы планируем включить на странице категории
  • Используйте настраиваемые параметры и сложные продукты для управления вариантами
  • Минимизируйте количество доступных для поиска атрибутов
  • Удалите неиспользуемые свойства продукта.
  • Храните атрибуты, не связанные с коммерцией, и управляйте ими во внешних системах PMS.

Хотя эти решения были представлены в качестве обходного пути для решения реальной проблемы, в долгосрочной перспективе платформы электронной коммерции должны будут масштабироваться, чтобы решать проблемы, связанные с постоянно растущими объемами данных о продуктах, поступающих с онлайн-рынками.

В McFadyen Digital мы разрабатываем онлайн-рынки более 15 лет и постоянно пользуемся доступными платформами. Наши технологические услуги для операторов рынка включают обзор архитектуры, анализ поставщиков, внедрение и многое другое. Чтобы узнать больше, посетите наш рынок технологических решений. Для получения дополнительной информации обо всем, что вам нужно для создания индивидуального магазина Commerce и управления им, см. Посетите https://devdocs.magento.com/

об авторе

Шарада Рао — старший инженер-программист в McFadyen Digital. Ей нравится изучать и внедрять новые технологии. Заядлый путешественник и гастроном, Шарада любит исследовать новые места. Она остается с мужем и 11-месячным сыном в Бангалоре. Во время своего пребывания в McFadyen Digital она участвовала в нескольких крупных проектах по внедрению электронной коммерции и торговых площадок.