Lidando com a atribuição de alto volume com Magento 2

Estendendo os recursos do Magento 2 para suportar um grande número de atributos totais (maior que 10.000) e um grande número de atributos por conjunto (maior que 1000 por conjunto)

Introdução

Os marketplaces online representaram 67% do eCommerce global em 2021. US$ 3,23 trilhões foram gastos globalmente nos 100 principais marketplaces. No caso do Walmart tem mais de 100.000 vendedores, enquanto a Amazon vende cerca de 350 milhões de produtos em seu marketplace. As plataformas tradicionais de eCommerce devem ser dimensionadas muito rapidamente para processar os enormes volumes de dados com os quais agora precisam lidar.

À medida que mais e mais vendedores são integrados ao marketplace, a variedade de produtos oferecidos aumenta. Isso causa desafios únicos na categorização desses produtos sem afetar o desempenho geral e a facilidade de uso. Um desses desafios que a equipe da McFadyen Digital enfrentou durante uma recente implementação foi lidar com os vários atributos de produto que acompanhavam os catálogos dos vendedores.

Implementamos um marketplace B2B em Magento e Webkul para um de nossos clientes nos EUA que vende produtos de fixação industrial. À medida que mais vendedores eram integrados, a variedade de produtos aumentava, assim como o número de atributos exclusivos do produto que cada um trazia. O número do atributo excedeu o recomendado pelo Magento e enfrentamos problemas significativos de desempenho. Nossos especialistas técnicos realizaram uma análise detalhada do problema e conseguiram implementar algumas soluções alternativas para lidar com a situação. Vamos discutir alguns deles neste blog.

Importação de Produtos:

Magento recomenda dividir muitos atributos em vários conjuntos. Mas, se o número de conjuntos de atributos também se tornar grande, isso impactará negativamente o desempenho da importação de produtos e atributos. Isso acontece porque o Magento pré-carrega todos os atributos e conjuntos de atributos na memória. Por exemplo, suponha que haja 1.000 conjuntos de atributos e importemos apenas um subconjunto de produtos. Nesse caso, o Magento ainda carrega todos os atributos e conjuntos de atributos disponíveis, o que aumenta o consumo de memória, aumentando assim o tempo do processo de importação. Ao importar produtos, é chamado o método init AbstractType, que carrega todos os atributos disponíveis no banco de dados do produto. Primeiro, todos os atributos são carregados, depois os conjuntos de atributos e estes são organizados com base no id do atributo.

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

Solução

A solução fácil para esse problema é carregar apenas o conjunto de atributos /produtos necessários do arquivo CSV padrão, em vez de tentar fazer uma importação completa. Por exemplo, suponha que estamos tentando importar uma única categoria de produtos. Nesse caso, carregamos atributos apenas dessa categoria e não o restante dos conjuntos de atributos/atributos na memória.

Para isso, sobrescrevemos o método init do tipo Simple Import conforme abaixo:

Isso nos ajudou a melhorar notavelmente o desempenho e o tempo de importação foi reduzido em quase 30%.

Listagem de Produtos:

Ao visitar qualquer página de categoria, o Magento passa todos os dados de atributo para o Elastic Search para recuperar detalhes de categoria e agregação. Muitos atributos levam ao alto consumo de memória, resultando em degradação do desempenho.

A classe FilterableAttributeList carregará todos os atributos e conjuntos de atributos em uma categoria, mesmo que tenhamos apenas um subconjunto de atributos necessários para filtrar na categoria específica.

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

Quando nos conectamos com o Elastic Search, a solicitação deve ser construída com dois parâmetros, como o que fazemos no MySQL ao criar uma consulta,

  1. Parâmetro de correspondência
  2. Agregação, que traz todos os dados que precisamos

O Magento usa agregação como navegação de camada e retorna todos os dados, portanto, a contagem de agregação aumentará quando tivermos uma grande quantidade de dados. Isso afetará o Elastic Search quando tentarmos obter mais dados de agregação em uma única consulta.

Isso também pode causar problemas com a indexação nas tabelas de flat entity. As tabelas de flat entity não são por conjunto de atributos e, portanto, são uma agregação de todos os atributos que podem ser executados nos limites máximos de coluna do MySQL.

A partir do MySQL 5.6.9, o número máximo de colunas é 1017, o que tornará a página de edição do produto do administrador um rastreamento inutilizável, causando um impacto severo na renderização dos produtos no front-end.

Como o Magento funciona:

O Magento carrega os metadados do atributo e, em seguida, o valor desse atributo. As entidades terão que armazenar essas informações na memória. No entanto, como os metadados de atributo são armazenados no cache do Magento, os piores efeitos seriam vistos no carregamento da primeira página.

Novamente, o KnockoutJS não foi projetado para alto desempenho.

Solução:

Como o Magento tenta passar todos os atributos de uma única categoria, substitua o construtor de solicitações, reduza aos específicos relacionados à categoria e forneça um recurso de mapeamento para a categoria. Assim, sempre que a página da categoria é carregada, carregamos apenas os atributos dessa categoria.

A função Create() deve ser substituída para criar uma solicitação dinâmica com base na página de pesquisa da categoria, passando o ID da categoria ou o ID da marca ou o ID do vendedor.

De acordo com a documentação do Magento, o limite para atributos do produto é 2000 com 500 filtráveis. Mais de 500 ou mais de 10.000 atributos de produto apresentam várias degradações de desempenho na vitrine e no administrador do Magento (incluindo o problema relatado).

Para resumir, as seguintes práticas recomendadas devem ser lembradas ao lidar com um grande número de atributos do produto:

  • Use modelos de produtos diferentes (conjuntos de atributos) para produtos diferentes.
  • No Magento Admin, há um campo “Use in Product Listing”. Habilite apenas os atributos que planejamos habilitar na página da categoria
  • Aproveite opções personalizadas e produtos complexos para gerenciamento de variações
  • Minimize o número de atributos pesquisáveis
  • Remova as propriedades do produto não utilizadas.
  • Armazenar e gerenciar atributos não relacionados ao comércio em sistemas PMS externos

Embora essas soluções tenham sido introduzidas como soluções alternativas para o problema real, a longo prazo, as plataformas de eCommerce terão que ser ampliadas para enfrentar esses desafios apresentados pelos volumes cada vez maiores de dados de produtos que acompanham os marketplaces online.

Na McFadyen Digital, desenvolvemos marketplaces online há mais de 15 anos e estamos constantemente expostos às plataformas disponíveis. Nossos serviços de tecnologia para operadores de marketplace incluem revisão de arquitetura, análise de fornecedores, implementação e muito mais. Para saber mais visite nossas soluções de tecnologia de marketplace. Para obter mais informações sobre tudo o que você precisa para criar e gerenciar uma loja Commerce personalizada. Visite https://devdocs.magento.com/

Sobre a Autora

Sharada Rao é engenheira de software sênior da McFadyen Digital. Ela gosta de aprender e implementar novas tecnologias. Uma ávida viajante e gastrônoma, Sharada gosta de explorar novos lugares. Ela fica com o marido e o filho de 11 meses em Bangalore. Durante seu período na McFadyen Digital, ela fez parte de alguns projetos importantes de implementação de eCommerce/marketplace.