Solución permanente para el problema de indexación común

23

Hemos desarrollado algún proyecto de magento con un gran registro de inventario y siempre enfrentamos el problema de indexación, hemos intentado todo lo que se encuentra en Internet para resolver el problema de indexación diario, como truncar las tablas planas y volver a indexar usando CLI, configurando el cron para indexación, pero este es nuestro dolor de cabeza diario con el problema de la indexación.

Estamos buscando una solución permanente para este problema mientras trabajamos en proyectos, hay diferentes escenarios, como actualizar los productos a diario o importar los productos desde algún otro feed diariamente.

Cualquier persona que tenga algunas mejores prácticas con esto o alguna solución alternativa, compártalas que serán muy apreciadas.

ravisoni
fuente
He desperdiciado un año en Magento y sus extensiones y su arquitectura de datos extremadamente ineficiente e idiota que hace que un sitio de comercio electrónico con solo 10K más productos sea una mierda. Todas estas advertencias deberían haberse dado a cualquiera que comience a ver Magento CE. Las torres de Magento deberían ser llevadas a los tribunales por perder miles de horas hombre. Simplemente deje que una base de datos haga indexación, no haga el trabajo de una base de datos. Aconsejo que en lugar de gastar dinero en un servidor dedicado y luego toneladas de horas de trabajo sin dormir durante la noche, es mejor pasar a una plataforma de comercio electrónico alojada o una fuente abierta que use el servidor MS SQL.
semiprecious.com
¿Alguna vez pensaste que tal vez no encontraste la extensión correcta o la configuración correcta del servidor? Si algún software no se ajusta a sus necesidades no significa necesariamente que sea inútil. He estado ganando mi pan (y cerveza) durante los últimos 5 años de Magento y también tuve muchos clientes satisfechos. Algunos con más de 10k catálogo.
Marius
Son correctos, debido a la forma en que CE funciona, el mantenimiento de datos es un problema con miles de skus de 10s a 100s. EE es mejor debido a las actualizaciones de indexación que han realizado, pero eso es para compañías de ingresos de $ mulit-million. Puede lanzar hosting, pero hará que su ROI sea negativo. La solución que utilizamos es muy especializada y las cargas de procesos delta son similares a las soluciones como el uso de SAP y Walmart, combinadas con una solución especial de fijación de precios (ATG-esque) que evita el problema de indexación (fx y margen en línea / recálculos de atributos), combinado con clúster hosting. Respuesta simple no, Magento no fue diseñado de manera óptima.

Respuestas:

31

Es importante entender qué índices son lentos y por qué

La complejidad del catálogo y, en última instancia, la arquitectura de la tienda determinarán cuánto tiempo llevará una reindexación, combinada con la infraestructura subyacente.

  • Si tiene 50,000 productos y 10 visitas a la tienda, puede garantizar que los pocos millones de filas catalog_url_rewritetardarán en procesarse.

  • Si tienes 100 productos, sino 5.000 atributos, se puede garantizar la catalog_attributeso catalog_product_flatmesa tomará una edad para reconstruir, o caer plana en su cara

  • Si tiene 1,000 productos, pero 500 atributos de búsqueda, catalog_fulltext_searchnuevamente tomará una edad para completar

La solución a todos y cada uno de los problemas que enfrenta no es 1 talla para todos, se trata de diseñar su tienda correctamente; tener la infraestructura adecuada para soportarlo y usar una frecuencia / estrategia de reindexación que respalde la actualidad y el rendimiento del contenido.

  • Agregar caché de front-end no ayudará en absoluto
  • Lanzar más hardware a la situación podría
  • Abordar el tamaño / complejidad del catálogo ayudará
  • Usar herramientas de indexación de terceros ayudará
  • La externalización de ciertos índices (por ejemplo, búsqueda> SOLR) ayudará

También está el caso de evaluar si incluso se requieren ciertos índices. El uso de producto / categoría plana no siempre hace que todas las tiendas sean más rápidas; lo hemos visto hacer que las tiendas sean mucho más lentas. Por lo tanto, es posible que después de probar el rendimiento antes / después, ni siquiera sean una consideración.

Ben Lessani - Sonassi
fuente
8

tl; dr

No hay solución de bala de plata. Sugiero algunas soluciones alternativas, Sonassi_Fastsearchindexpero eso es específicamente para la búsqueda en el catálogo.

¿Quizás deshabilitar las actualizaciones de índice en guardar (la programación para ejecutarse durante la noche) proporcionará algún alivio? Combinado con la adición de más almacenamiento en caché (memcached, Redis, APC) y un caché de página completa como Varnish (si está ejecutando CE) puede ayudarlo a comenzar. Si planeas usar Varnish, mira en Nexcess_Turpentinegithub para un inicio rápido.

Más información

Los problemas de indexación, específicamente catalog_url_rewrites, son bien conocidos y documentados en la comunidad. Magento los ha manejado en la versión Enterprise porque estos son los clientes más afectados. Muchos clientes de EE tienen más de 10k productos y múltiples vistas de tiendas, sitios web, etc.

Sin embargo, si tiene un catálogo grande y una gran cantidad de atributos, puede encontrarse en la posición de que la indexación tomará un largo período de tiempo, específicamente catalog_url_rewrite, product_flat, en ese caso mi sugerencia es no arreglar el tiempo de ejecución del índice longitud, pero en lugar de descargar algo de procesamiento para permitir que la caja pase los ciclos de la CPU indexando en lugar de servir contenido .

Las preguntas que debes hacerte:

  • ¿Estoy perdiendo negocios debido a problemas de indexación?
  • ¿Estoy perdiendo productividad debido a problemas de indexación?
  • ¿Estoy en riesgo de perder conversiones o mi tasa de conversión está sufriendo?
  • ¿Mis clientes corren el riesgo de comprar artículos fuera de stock que son el resultado directo de que los índices no estén sincronizados (inventario, etc.)
  • ¿Son las reglas de precios de mi catálogo parte de mi negocio principal y
  • ¿Es mi tasa de conversión de búsqueda en el sitio más alta que la norma (8-10%), por lo que se beneficia de una mejor indexación?

No existe una solución de plata para este problema en particular: como proveedor de soluciones, debe ayudar a su cliente a tomar la decisión que mejorará mejor las ventas y el negocio mientras mantiene bajos los costos generales.

Alternativas

Descargue la búsqueda de catálogo y la navegación en capas a Solr.

Escala horizontalmente. Agregue más servidores Apache / nginx. Más servidores = más rendimiento concurrente. Esto no es 1: 1. Nexcess tiene un excelente documento técnico sobre rendimiento y configuración de Apache aquí: http://www.nexcess.net/magento-best-practices-whitepaper

Y, si opta por ir con Varnish, recuerde:

ingrese la descripción de la imagen aquí

philwinkle
fuente
Apreciamos los accesorios, pero la reindexación no tiene nada que ver con el almacenamiento en caché de front-end; Es completamente una operación de fondo. Aliviar la carga frontal evitará que una reindexación tarde más, pero ciertamente no lo hará más rápido.
Ben Lessani - Sonassi
A lo que me refiero es a reducir el tráfico que llega a la caja. La principal preocupación aquí es que el sitio no esté disponible durante el índice o se bloquee durante un período de tiempo desconocido mientras se ejecutan los trabajos. Al final del día, si la indexación no tuvo un efecto negativo en la interfaz, no importaría cuánto tiempo se ejecute el trabajo. No hay una solución o mejora para indexar los tiempos de carga. Nadie quiere una respuesta de "Actualizar a la versión paga", por lo que mi sugerencia es mejorar la disponibilidad de su interfaz y programar el índice para que se ejecute en horas pico.
philwinkle
Absolutamente, entendí eso, pero aunque la disponibilidad es importante para un sitio web; no es suficiente para un sitio de comercio electrónico. Si no puede realizar una compra debido a que los índices están bloqueados, entonces el sitio también podría estar fuera de línea.
Ben Lessani - Sonassi
solo tenemos unos pocos cientos de productos y todavía nos lleva varios minutos guardar un producto simple en Magento 1.7, y pago más de $ 500 al mes por un servidor dedicado de Rackspace. No estoy seguro de por dónde empezar, pero sospecho que algún índice está quizás dañado. ¿Alguien puede recomendar un buen consultor de magento?
Max Hodges
5

En la mayoría de las tiendas web de Magento pesadas, la mayoría de las veces ha sido muy difícil hacer que funcione la gestión de índices de backend de Magento. He tenido este problema a menudo. Ejecutar el script de shell todo el tiempo por el desarrollador suele ser agitado. Por lo general, soluciono este problema permanentemente de esta manera.

Creo una nueva copia de shell / indexer.php> shell / myindexer.php

Personaliza shell / myindexer.php alrededor de la línea 154

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

A

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

y, agregue esta verificación alrededor de la línea 166

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

antes de

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

Y luego agrego el nuevo script de shell a cpanel cron para que se ejecute cada 5 minutos

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

Como el script de shell anterior se ejecuta cada 5 minutos y reindexa solo los procesos que requieren reindexar, reduce el riesgo de una gran carga en la CPU del servidor, así como todo el proceso de reindexación es muy rápido. Si ningún proceso requiere reindexar, simplemente no ejecutará el proceso de reindexación. Además, recuerde poner el modo de reindexación en "Actualizar al guardar" en la página de gestión de índices. Si no lo sabe, puede obtener esta opción en Acciones> Cambiar modo índice al lado del botón Enviar.

rbncha
fuente
@changeling, de nada. Me alegro de que valga la pena.
rbncha
He incorporado esto a mi script, en caso de que alguien lo encuentre útil: gist.github.com/steverobbins/…
Steve Robbins
4

Sería más fácil decir si podría dar más datos (tamaño del inventario, visitantes, máquina), pero aquí hay una posibilidad:

  • Utilizamos la Sonassi_Fastsearchindexextensión para el índice de búsqueda en el catálogo. Aunque solo indexa el título, la descripción y el sku (creo que lo he notado), funciona muy bien y reduce el tiempo del indexador de búsqueda de catálogo.
  • Lo más probable es que haya algunos indexadores que no tenga que ejecutar, es decir, para etiquetas o atributos de producto. A veces es suficiente si solo hace un precio, un producto plano, una categoría de productos y una búsqueda de catálogo con regularidad, y los demás tal vez a diario.
  • sincronizamos productos con un sistema externo cada dos horas, y mientras tanto, indexamos con scripts php. Entonces, tenemos un cronjob para cada indexador que queremos ejecutar en un momento determinado, y dejamos que este cron ejecute el script. Este parece ser el mejor punto intermedio entre lo que el servidor puede hacer y los datos actualizados del producto.

Esto se ejecuta en Magento CE 1.7.0.2; sigue siendo un dolor, sin embargo;)

simonthesorcerer
fuente
En general, tenemos problemas con el producto plano, todos los demás índices están bien.
ravisoni
3

usando Dnd_Patchindexurl pude reducir el tiempo de reindex de catalog_url_rewrite a casi el 70%

¡Creo que es una buena solución excluir productos deshabilitados o productos no visibles para que su URL sea creada 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

Después:

$ 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

¡Lo instalé en 1.9.1.1 y funciona muy bien!

También se puede instalar a través de Connect http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/

web maurisource
fuente
1

Actualice a EE 1.13. Los indexadores se mejoraron mucho en esta versión.

Paul Grigoruta
fuente
2
Pero la mayoría de los clientes prefieren la versión comunitaria.
ravisoni
1
Convenido. 1.8 saldrá en un par de semanas, pero lo más probable es que no incluya las optimizaciones del indexador. Tampoco me gusta, pero esta es la forma más fácil, segura y quizás más económica de hacer que sus indexadores funcionen.
Paul Grigoruta
Es imposible encontrar una solución permanente.
ravisoni
En la mayoría de los casos, donde alguien tiene tantos SKU que realmente se topan con una pared de ladrillos con los indexadores CE 1.7 existentes, entonces deben ir con EE 1.13. Hay muchos sitios que funcionan sin problemas con estos indexadores CE 1.7 y EE 1.12 que tienen 10-25k SKU. La clave es administrarlos directamente en un nivel de flujo de trabajo y tener la infraestructura adecuada.
davidalger
CE es una elección perfectamente adecuada. Las características en EE 1.13 son correcciones de errores , que la comunidad ha introducido en CE de todos modos. Independientemente de eso e independientemente de si usa CE o EE, el tiempo de indexación siempre dependerá por completo de la complejidad del catálogo, la configuración del servidor, la concurrencia de visitantes y la frecuencia de reindexación. EE no es una bala mágica, y ciertamente no es una solución apropiada para cualquier problema relacionado con la arquitectura.
Ben Lessani - Sonassi