Ampliando os recursos do Magento 2 para oferecer suporte a um grande número de atributos totais (maior que 10,000) e a um grande número de atributos por conjunto de atributos (maior que 1000 por conjunto)
Introdução
Online marketplaces foi responsável por 67% do comércio eletrônico global em 2021. US$ 3.23 trilhões foram gastos globalmente nos 100 principais online marketplaces. Walmart's marketplace tem mais de 100,000 vendedores, enquanto a Amazon vende cerca de 350 milhões de produtos em seu site. marketplace. Tradicional eCommerce as plataformas precisam crescer muito rápido para processar os enormes volumes de dados que agora precisam manipular.
À 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 impactar o desempenho geral e a facilidade de uso. Um desses desafios que a equipe da McFadyen Digital enfrentou durante uma recente marketplace a implementação estava lidando com os vários atributos do produto que acompanhavam os produtos do vendedor.
Implementamos um B2B marketplace no Magento e Webkul para um dos nossos clientes nos EUA que vende produtos de fixação industrial. À medida que mais vendedores foram integrados, a variedade de produtos aumentou, assim como o número de atributos de produtos exclusivos que cada um trouxe. O número de atributos excedeu o que o Magento recomenda, 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. Discutiremos algumas delas neste blog.
.
Importação de produto:
O Magento recomenda dividir muitos atributos em vários conjuntos de atributos. Mas, se o número de conjuntos de atributos também se tornar grande, isso impacta negativamente o desempenho do produto e a importação de atributos. Isso acontece porque o Magento pré-carrega todos os atributos e conjuntos de atributos na memória. Por exemplo, suponha que haja 1000 conjuntos de atributos e importamos 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, o TipoResumo init é chamado, 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 então organizados com base no id do atributo.
fornecedor/magento/module-catalog-import-export/Modelo/Importação/Produto/Tipo/AbstractType
Alternativa?
A solução alternativa fácil para esse problema é carregar apenas o conjunto de atributos /products necessário 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 /attributes na memória.
Para isso, substituímos o o init método do tipo Importação Simples conforme abaixo::
Isso nos ajudou a melhorar o desempenho notavelmente e o tempo de importação foi reduzido em quase 30%.
Lista de produtos:
Ao visitar qualquer página de categoria, o Magento passa todos os dados de atributos para o Elastic Search para recuperar detalhes de categoria e agregação. Muitos atributos levam a alto consumo de memória, resultando em degradação de desempenho.
A classe FilterableAttributeList carregará todos os atributos e conjuntos de atributos em uma categoria, mesmo se tivermos apenas um subconjunto de atributos necessários para filtrar na categoria específica.
fornecedor/magento/catálogo-de-módulos/Modelo/Camada/Categoria/FiltrávelAttributeList
Quando nos conectamos com o Elastic Search, a requisição deve ser construída com dois parâmetros, como fazemos no MySQL ao criar uma consulta,
- Parâmetro de correspondência
- Agregação, que reúne todos os dados que necessitamos
O Magento usa agregação como navegação de camada e retorna todos os dados, então a contagem de agregação aumentará quando tivermos uma grande quantidade de dados. Isso impactará o Elastic Search quando tentamos obter mais dados de agregação em uma única consulta.
Isso também pode causar problemas com indexação nas tabelas de entidade planas. As tabelas de entidade planas não são por conjunto de atributos e, portanto, são uma agregação de todos os atributos que podem atingir os limites máximos de colunas 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 de produtos no front-end.
Como o Magento funciona:
O Magento carrega os metadados do atributo e então o valor para esse atributo. As entidades terão que armazenar essas informações na memória. No entanto, como os metadados do 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.
Alternativa?
Como o Magento tenta passar todos os atributos de uma única categoria, substitua o request builder, restrinja aos específicos relacionados à categoria e forneça um recurso de mapeamento para a categoria. Então, sempre que a página da categoria carrega, 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 de categoria, passando o ID da categoria, o ID da marca ou o ID do vendedor.
Conforme a documentação do Magento, o limite para atributos de produto é 2000 com 500 filtráveis. Mais de 500 ou mais de 10 mil atributos de produto introduzem 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 mantidas em mente ao lidar com um grande número de atributos de produto:
- Use diferentes modelos de produtos (conjuntos de atributos) para produtos diferentes.
- No Magento Admin, há um campo “Usar na listagem de produtos”. 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 propriedades do produto não utilizadas.
- Armazene e gerencie atributos não relacionados ao comércio em sistemas PMS externos
Embora estas soluções tenham sido introduzidas como soluções alternativas ao problema real, a longo prazo, eCommerce as plataformas terão de ser ampliadas para enfrentar estes desafios colocados pelos volumes cada vez maiores de dados de produtos que acompanham o online marketplaces.
Na McFadyen Digital, desenvolvemos online marketplaces por mais de 15 anos e estão constantemente expostos às plataformas disponíveis. Nossos serviços de tecnologia para marketplace operadores incluem revisão de arquitetura, análise de fornecedores, implementação e muito mais. Para saber mais, visite nosso marketplace soluções tecnológicas. Para mais informações sobre tudo o que você precisa para construir e gerenciar uma loja Commerce personalizada. Visite https://devdocs.magento.com/
Sobre o autor
Sharada Rao é uma engenheira de software sênior na McFadyen Digital. Ela gosta de aprender e implementar novas tecnologias. Uma viajante ávida e gastrônoma, Sharada gosta de explorar novos lugares. Ela fica com o marido e o filho de 11 meses em Bengaluru. Durante sua passagem pela McFadyen Digital, ela fez parte de alguns grandes eCommerce/ marketplace projetos de implementação.