Solução permanente para o problema comum de indexação


23

Desenvolvemos um projeto magento com um grande registro de inventário e sempre enfrentamos o problema de indexação. Tentamos tudo o que foi encontrado na Internet para resolver problemas de indexação cotidianos, como truncar tabelas simples e reindexar usando CLI, configurando o cron para indexação, mas essa é a nossa dor de cabeça do dia-a-dia diante do problema de indexação.

Estamos procurando uma solução permanente para esse problema. Enquanto trabalhamos em projetos, existem diferentes cenários, como atualizar os produtos diariamente ou importar os produtos de algum outro feed diariamente.

Qualquer pessoa que tenha algumas práticas recomendadas com essa ou com alguma solução alternativa, compartilhe-as que serão muito apreciadas.


Eu perdi um ano no Magento e suas extensões e sua arquitetura de dados extremamente ineficiente e idiota que cria um site de comércio eletrônico com meros 10 mil produtos. Todos esses avisos deveriam ter sido dados a qualquer um que estivesse começando a ver o Magento CE. Os visitantes do Magento devem ser levados a tribunal por desperdiçar milhares de horas-homem. Apenas deixe um banco de dados fazer indexação, não faça o trabalho de um banco de dados. Aconselho que, em vez de desperdiçar dinheiro em um servidor dedicado e, em seguida, toneladas de horas de trabalho sem dormir durante a noite, seja melhor mudar para uma plataforma de comércio eletrônico hospedada ou um código-fonte aberto que use o MS SQL Server.
Semiprecious.com #

Você já pensou que talvez não tenha encontrado a extensão correta ou a configuração correta do servidor? Se algum software não atender às suas necessidades, isso não significa necessariamente que é inútil. Eu tenho ganho meu pão (e cerveja) nos últimos 5 anos com o Magento e também tinha muitos clientes satisfeitos. Alguns com mais de 10k de catálogo.
Marius

Eles estão corretos, devido à maneira como a CE trabalha, a manutenção de dados é um problema com 10s a 100s milhares de skus. O EE é melhor devido às atualizações de indexação que eles fizeram, mas isso é para empresas de receita de milhões de milhões de dólares. Você pode hospedar nele, mas o seu ROI será negativo. A solução que usamos é muito especializada e o upload de processos delta é semelhante a soluções como SAP e Walmart, combinadas com uma solução especial de preços (estilo ATG) que ignora o problema de indexação (FX e margem inline / recálculos de atributos), combinados com cluster hospedagem. Resposta simples não, Magento não foi projetado de maneira ideal.

Respostas:


31

É importante entender quais índices são lentos e por que

A complexidade do catálogo e, finalmente, a arquitetura da loja determinam quanto tempo levará um re-índice - combinado com a infraestrutura subjacente.

  • Se você possui 50.000 produtos e 10 visualizações de loja, pode garantir os poucos milhões de linhas em catalog_url_rewrite levarão tempo para serem processados.

  • Se você possui 100 produtos, mas 5.000 atributos, pode garantir que a tabela catalog_attributesou catalog_product_flatlevará um tempo para ser reconstruída ou cairá de cara no chão.

  • Se você tiver 1.000 produtos, mas 500 atributos pesquisáveis, catalog_fulltext_searchnovamente levará um tempo para concluir

A solução para todos os problemas que você enfrenta não é do tamanho 1, serve para arquitetar sua loja corretamente; ter a infraestrutura certa no lugar para apoiá-la e usar uma frequência / estratégia de re-indexação que ofereça suporte ao desempenho e desempenho recentes.

  • Adicionar cache de front-end não ajudará em nada
  • Lançar mais hardware na situação pode
  • A abordagem do tamanho / complexidade do catálogo ajudará
  • O uso de ferramentas de indexação de terceiros ajudará
  • Externalizar certos índices (por exemplo, pesquisa> SOLR) ajudará

Há também o caso de avaliar se determinados índices são necessários. O uso de categoria / produto plano nem sempre torna todas as lojas mais rápidas; vimos isso tornar as lojas muito mais lentas. Portanto, você pode descobrir que, após testar o desempenho antes / depois - elas nem são consideradas.


8

tl; dr

Não existe uma solução de bala de prata. Existem algumas soluções alternativas, eu sugiro Sonassi_Fastsearchindex- mas isso é especificamente para pesquisa de catálogo.

Talvez a desativação das atualizações de índice ao salvar - agendamento para execução durante a noite - forneça algum alívio? Combinado com a adição de mais cache - memcached, Redis, APC - e um cache de página inteira como o Varnish (se você estiver executando o CE), pode começar. Se você planeja usar o Varnish, consulte o Nexcess_Turpentinegithub para iniciar rapidamente.

Mais Informações

Os problemas de indexação - especificamente catalog_url_rewrites - são bem conhecidos e documentados na comunidade. O Magento lidou com isso na versão Enterprise porque esses são os clientes que são mais afetados adversamente. Muitos clientes de EE têm produtos com mais de 10k e várias visualizações de lojas, sites, etc.

No entanto, se você tiver um catálogo grande e um grande número de atributos, poderá encontrar-se na posição de que a indexação levará um longo período de tempo - especificamente catalog_url_rewrite, product_flat - nesse caso, minha sugestão é não corrigir o tempo de execução do índice comprimento, mas sim descarregar algum processamento para permitir que a caixa gaste ciclos de CPU indexando em vez de exibir conteúdo .

As perguntas a serem feitas:

  • Estou perdendo negócios devido a problemas de indexação?
  • Estou perdendo a produtividade devido a problemas de indexação?
  • Estou correndo o risco de perder conversões ou minha taxa de conversão está sofrendo?
  • Meus clientes correm o risco de comprar itens fora de estoque que resultam diretamente de índices fora de sincronia (inventário etc.)
  • Minhas regras de preços de catálogo fazem parte do meu negócio principal e
  • Minha taxa de conversão de pesquisa no site é superior à norma (8 a 10%), beneficiando assim de uma melhor indexação?

Não existe uma solução completa para esse problema em particular - como fornecedor de soluções, você deve ajudar seu cliente a tomar a decisão que melhor melhorará as vendas e os negócios, mantendo os custos indiretos baixos.

Alternativas

Descarregue a pesquisa de catálogo e a navegação em camadas para o Solr.

Escala horizontalmente. Adicione mais servidores Apache / nginx. Mais servidores = taxa de transferência mais simultânea. Isso não é 1: 1. O Nexcess tem um ótimo whitepaper sobre desempenho e configuração do Apache aqui: http://www.nexcess.net/magento-best-practices-whitepaper

E, se você optar por usar o verniz, lembre-se:

insira a descrição da imagem aqui


Apreciamos os adereços, mas a reindexação não tem nada a ver com o cache de front-end; é inteiramente uma operação de back-end. O alívio do carregamento do front-end impedirá que o re-índice demore mais, mas certamente não o tornará mais rápido.
precisa saber é o seguinte

O que estou falando é reduzir o tráfego que chega na caixa. A principal preocupação aqui é o site ficar indisponível durante o índice ou ficar bloqueado por um período desconhecido enquanto os trabalhos são executados. No final do dia, se a indexação não tivesse efeito negativo no frontend, não importaria quanto tempo o trabalho fosse executado. Não há correção ou aprimoramento na indexação dos tempos de carregamento. Ninguém deseja uma resposta "Atualizar para a versão paga" - portanto, minha sugestão é melhorar a disponibilidade do front-end e agendar o índice para ficar fora do pico.
philwinkle

Absolutamente, eu entendi isso - mas embora a disponibilidade seja importante para um site; não é suficiente para um site de comércio eletrônico. Se você realmente não pode fazer uma compra devido ao bloqueio de índices, o site também pode estar offline.
precisa saber é o seguinte

temos apenas algumas centenas de produtos e ainda leva alguns minutos para salvar um produto simples no Magento 1.7, e pago mais de US $ 500 por mês por um servidor Rackspace dedicado. Não sei por onde começar, mas suspeito que talvez algum índice esteja corrompido. Alguém pode recomendar um bom consultor de magento?
Max Hodges

5

Na maioria das grandes oficinas on-line do Magento, tem sido muito difícil fazer o gerenciamento de índice do back-end do Magento funcionar. Eu tive esse problema frequentemente. A execução do shell script o tempo todo pelo desenvolvedor geralmente é agitada. Normalmente, eu corrijo esse problema permanentemente assim.

Crio uma nova cópia do shell / indexer.php> shell / myindexer.php

Personalize shell / myindexer.php em torno da linha 154

} else if ($this->getArg('reindex') || $this->getArg('reindexall')) {

Para

} else if ($this->getArg('reindex') || $this->getArg('reindexall')  || $this->getArg('reindexallrequired') ) {

e adicione esta verificação na linha 166

//reindex only if required
if( $this->getArg('reindexallrequired') && $process->getStatus() == Mage_Index_Model_Process::STATUS_PENDING )
    continue;

antes

$startTime = microtime(true);
$process->reindexEverything();
$resultTime = microtime(true) - $startTime;
Mage::dispatchEvent($process->getIndexerCode() . '_shell_reindex_after');

E então adiciono o novo script de shell ao cpanel cron para executar a cada 5 minutos

/home/public_html/shell/indexer.php --reindexallrequired >/dev/null

Como o script de shell acima é executado a cada 5 minutos e reindexa apenas os processos que exigem reindexação, reduz o risco de carga pesada no cpu do servidor, bem como todo o processo de reindexação é muito rápido. Se nenhum processo exigir reindexação, ele simplesmente não executará o processo de reindexação. Além disso, lembre-se de colocar o modo de reindexação em "Atualização ao salvar" na página Gerenciamento de índice. Se você não souber, poderá obter esta opção em Ações> Alterar modo de índice ao lado do botão Enviar.


@ changeling, de nada. Estou feliz que vale a pena.
Rbdcha

Eu incorporei isto em meu script, em alguém encontrar casos é útil: gist.github.com/steverobbins/...
Steve Robbins

4

Seria mais fácil dizer se você poderia fornecer mais dados (tamanho do inventário, visitantes, máquina), mas aqui está uma possibilidade:

  • usamos o Sonassi_Fastsearchindexíndice de extensão para pesquisa de catálogo. Embora apenas indexe título, descrição e sku (acho que percebi), funciona muito bem e reduz o tempo do indexador de pesquisa de catálogo.
  • provavelmente haverá alguns indexadores que você não precisa executar, ou seja, para tags ou atributos do produto. Às vezes, basta se você pesquisar apenas preços, produtos planos, produtos de categorias e catálogos regularmente e os outros talvez diariamente.
  • sincronizamos produtos com um sistema externo a cada duas horas e, enquanto isso, indexamos com scripts php. Portanto, temos um cronjob para cada indexador que queremos executar em um determinado momento e deixamos que esse cron execute o script. Esse parece ser o melhor meio caminho entre o que o servidor pode fazer e os dados atualizados do produto.

Isso está sendo executado no Magento CE 1.7.0.2; ainda é uma dor;)


Geralmente, enfrentamos problemas com o produto nivelado, todos os outros índices estão corretos.
ravisoni

3

usando Dnd_Patchindexurl, fui capaz de reduzir o tempo de reindexação catalog_url_rewrite para quase 70%

Eu acho que é uma boa solução excluir produtos desativados ou produtos não visíveis para que o URL seja criado para nada!

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:11
Product Prices index was rebuilt successfully in 00:00:22
Catalog URL Rewrites index was rebuilt successfully in 00:08:49
Product Flat Data index was rebuilt successfully in 00:00:51
Category Products index was rebuilt successfully in 00:00:19
Catalog Search Index index was rebuilt successfully in 00:00:12
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

Depois de:

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:12
Product Prices index was rebuilt successfully in 00:00:24
Catalog URL Rewrites index was rebuilt successfully in 00:02:52
Product Flat Data index was rebuilt successfully in 00:00:57
Category Products index was rebuilt successfully in 00:00:25
Catalog Search Index index was rebuilt successfully in 00:00:13
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

Eu instalei no 1.9.1.1 e funcionando muito bem!

Também pode ser instalado através do Connect http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/


1

Atualize para o EE 1.13. Os indexadores foram fortemente aprimorados nesta versão.


2
Mas a maioria dos clientes prefere a versão da comunidade.
ravisoni

1
Acordado. 1.8 sairá dentro de algumas semanas, mas provavelmente não incluirá as otimizações do indexador. Também não gosto, mas essa é a maneira mais fácil, segura e talvez mais barata de obter o desempenho dos indexadores.
Paul Grigoruta

é impossível encontrar uma solução permanente.
ravisoni

Na maioria dos casos, onde alguém tem tantos SKUs que está realmente encontrando uma parede de tijolos com os indexadores CE 1.7 existentes, deve seguir o EE 1.13. Existem muitos sites com bom funcionamento por aí com esses indexadores CE 1.7 e EE 1.12 com SKUs de 10 a 25k. A chave é gerenciá-los diretamente no nível do fluxo de trabalho e ter a infraestrutura certa.
Davidalger

O CE é uma escolha perfeitamente adequada. Os recursos do EE 1.13 são correções de bugs - que a comunidade levou ao CE de qualquer maneira. Independentemente disso e independentemente de você usar CE ou EE - o tempo de indexação sempre será totalmente dependente da complexidade do catálogo, configuração do servidor, simultaneidade do visitante e frequência de re-indexação. O EE não é um item mágico e certamente não é uma solução apropriada para qualquer problema relacionado à arquitetura.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.