Permanente Lösung für das allgemeine Indizierungsproblem


23

Wir haben ein Magento-Projekt mit großen Bestandsaufzeichnungen entwickelt und sind immer mit dem Indizierungsproblem konfrontiert, bei dem wir alles versucht haben, was im Internet zu finden ist, um das alltägliche Indizierungsproblem zu lösen, z Indizierung, aber das ist unser alltägliches Problem mit der Indizierung.

Wir suchen nach einer dauerhaften Lösung für dieses Problem, während wir an Projekten arbeiten. Es gibt verschiedene Szenarien, z. B. das tägliche Aktualisieren der Produkte oder das tägliche Importieren der Produkte von einem anderen Futtermittel.

Wenn Sie Best Practices für diese oder eine Problemumgehung haben, teilen Sie uns diese mit, die wir sehr schätzen werden.


Ich habe ein Jahr in Magento und seinen Erweiterungen und seiner extrem ineffizienten und idiotischen Datenarchitektur verschwendet, die eine E-Commerce-Site mit nur 10.000 Produkten zum Scheißen bringt. Alle diese Warnungen sollten an jeden gerichtet sein, der mit der Anzeige von Magento CE beginnt. Magento-Mitarbeiter sollten vor Gericht gestellt werden, weil sie Tausende von Arbeitsstunden verschwendet haben. Lassen Sie einfach eine Datenbank indizieren, erledigen Sie nicht die Arbeit einer Datenbank. Ich empfehle, anstatt Geld auf einem dedizierten Server und dann Tonnen von schlaflosen Arbeitsstunden über Nacht zu verschwenden, lieber auf eine gehostete E-Commerce-Plattform oder eine Open Source-Plattform zu wechseln, die MS SQL Server verwendet.
semiprecious.com

Haben Sie jemals gedacht, dass Sie möglicherweise nicht die richtige Erweiterung oder Serverkonfiguration gefunden haben? Wenn eine Software nicht Ihren Anforderungen entspricht, bedeutet dies nicht zwangsläufig, dass sie unbrauchbar ist. Ich verdiene seit über 5 Jahren mein Brot (und Bier) mit Magento und hatte auch viele zufriedene Kunden. Einige mit mehr als 10k Katalog.
Marius

Sie sind korrekt, aufgrund der Art und Weise, wie CE funktioniert, ist die Datenpflege ein Problem bei Skus von 10 bis 100.000. EE ist aufgrund der von ihnen vorgenommenen Indexaktualisierungen besser, dies gilt jedoch für Unternehmen mit einem Umsatz von mehreren Millionen US-Dollar. Sie können Hosting darauf werfen, aber Sie werden Ihren ROI negativ machen. Die Lösung, die wir verwenden, sind sehr spezialisierte & Delta-Prozesse, die Uploads ähnlich wie bei SAP & Walmart verwenden, kombiniert mit einer speziellen Preisfindungslösung (ATG-esque), die das Indizierungsproblem umgeht (fx & Inline-Margin / Attribut-Recalcs), kombiniert mit Cluster Hosting. Einfache Antwort Nein, Magento wurde nicht optimal gestaltet.

Antworten:


31

Es ist wichtig zu verstehen, welche Indizes langsam sind und warum

Die Komplexität des Katalogs und letztendlich die Speicherarchitektur bestimmen, wie lange eine Neuindizierung in Kombination mit der zugrunde liegenden Infrastruktur dauern wird.

  • Wenn Sie 50.000 Produkte und 10 Filialansichten haben, können Sie sicherstellen, dass die catalog_url_rewriteVerarbeitung der wenigen Millionen Zeilen in der Zeit dauern wird.

  • Wenn Sie 100 Produkte haben, aber 5.000 Attribute, können Sie garantieren , dass der catalog_attributesoder catalog_product_flatTabelle wird ein Alter, um wieder aufzubauen, oder fällt flach auf seinem Gesicht

  • Wenn Sie 1.000 Produkte, aber 500 durchsuchbare Attribute haben, dauert die catalog_fulltext_searchFertigstellung erneut ein Alter

Die Lösung für jedes Problem, mit dem Sie konfrontiert sind, ist nicht eine Größe für alle. Es geht darum, Ihr Geschäft richtig zu gestalten. Bereitstellung der richtigen Infrastruktur für die Unterstützung und Verwendung einer Neuindexierungshäufigkeit / -strategie, die sowohl die Aktualität als auch die Leistung des Inhalts unterstützt.

  • Das Hinzufügen von Front-End-Caching hilft überhaupt nicht
  • Es könnte sein, dass mehr Hardware in die Situation gerät
  • Das Adressieren der Kataloggröße / -komplexität hilft
  • Die Verwendung von Indizierungswerkzeugen von Drittanbietern hilft dabei
  • Das Externalisieren bestimmter Indizes (z. B. Suche> SOLR) hilft

Es ist auch der Fall zu prüfen, ob bestimmte Indizes überhaupt erforderlich sind. Die Verwendung von flachen Produkten / Kategorien beschleunigt nicht immer alle Geschäfte. Wir haben gesehen, dass dadurch Geschäfte viel langsamer werden. Vielleicht stellen Sie fest, dass nach dem Testen der Leistung vor / nach - sie sind nicht einmal eine Überlegung.


8

tl; dr

Es gibt keine Wunderwaffe. Ich schlage vor Sonassi_Fastsearchindex, dass es einige Problemumgehungen gibt - diese sind jedoch speziell für die Katalogsuche gedacht.

Vielleicht hilft es, die Indexaktualisierungen beim Speichern zu deaktivieren - die Planung wird über Nacht ausgeführt -? Kombiniert mit dem Hinzufügen von mehr Caching (memcached, Redis, APC) und einem ganzseitigen Cache wie Varnish (wenn Sie CE ausführen) können Sie loslegen. Wenn Sie Lack verwenden Nexcess_Turpentinemöchten , sehen Sie sich für einen schnellen Einstieg den Github an.

Mehr Informationen

Die Indexierungsprobleme - insbesondere catalog_url_rewrites - sind in der Community bekannt und dokumentiert. Magento hat diese in der Enterprise-Version behandelt, da dies die Kunden sind, die am stärksten betroffen sind. Viele EE-Kunden haben über 10.000 Produkte und mehrere Store Views, Websites usw.

Wenn Sie jedoch einen großen Katalog und eine große Anzahl von Attributen haben, befinden Sie sich möglicherweise in der Position, dass die Indizierung einen langen Zeitraum in Anspruch nimmt, insbesondere catalog_url_rewrite, product_flat. In diesem Fall ist es mein Vorschlag , die Laufzeit des Index nicht zu korrigieren Länge, sondern etwas Verarbeitung zu entlasten, damit die Box CPU-Zyklen Indizierung verbringen kann, anstatt Inhalt zu liefern .

Die Fragen, die Sie sich stellen sollten:

  • Verliere ich aufgrund von Indizierungsproblemen mein Geschäft?
  • Verliere ich die Produktivität aufgrund von Indizierungsproblemen?
  • Habe ich das Risiko, Conversions zu verlieren, oder leidet meine Conversion-Rate?
  • Besteht für meine Kunden das Risiko, Artikel nicht auf Lager zu kaufen, die eine direkte Folge von nicht synchronen Indizes (Inventar usw.) sind?
  • Sind meine Katalogpreisregeln Teil meines Kerngeschäfts und
  • Liegt meine Conversion-Rate für die On-Site-Suche über der Norm (8-10%) und profitiert sie von einer besseren Indizierung?

Für dieses spezielle Problem gibt es keine Patentlösung. Als Lösungsanbieter sollten Sie Ihren Kunden dabei helfen, die Entscheidung zu treffen, mit der sich Umsatz und Geschäft am besten verbessern und die Gemeinkosten niedrig halten lassen.

Alternativen

Katalogsuche auslagern und geschichtete Navigation zu Solr.

Horizontal skalieren. Fügen Sie weitere Apache / Nginx-Server hinzu. Mehr Server = mehr gleichzeitiger Durchsatz. Das ist nicht 1: 1. Nexcess hat hier ein großartiges Whitepaper zu Leistung und Apache-Konfiguration: http://www.nexcess.net/magento-best-practices-whitepaper

Und wenn Sie sich für Varnish entscheiden - denken Sie daran:

Bildbeschreibung hier eingeben


Wir schätzen die Requisiten, aber die Neuindizierung hat nichts mit dem Front-End-Caching zu tun. Es ist eine reine Back-End-Operation. Durch die Reduzierung des Front-End-Ladevorgangs wird ein erneuter Index zwar nicht länger dauern, aber mit Sicherheit nicht schneller.
Ben Lessani - Sonassi

Worauf ich hinaus will, ist die Reduzierung des Verkehrs, der auf die Box kommt. Das größte Problem hierbei ist, dass die Site während der Indexerstellung nicht mehr verfügbar ist oder für einen unbekannten Zeitraum gesperrt ist, während Jobs ausgeführt werden. Wenn sich die Indizierung nicht negativ auf das Frontend auswirkt, spielt es letztendlich keine Rolle, wie lange der Job ausgeführt wird. Es gibt keine Korrekturen oder Verbesserungen bei der Indizierung der Ladezeiten. Niemand möchte eine Antwort auf die Frage "Upgrade auf die kostenpflichtige Version". Mein Vorschlag lautet daher, die Verfügbarkeit Ihres Frontends zu verbessern und den Index so zu planen, dass er außerhalb der Spitzenzeiten ausgeführt wird.
Philwinkle

Absolut, ich habe das verstanden - aber während die Verfügbarkeit für eine Website wichtig ist; Es reicht nicht für eine E-Commerce-Website. Wenn Sie aufgrund gesperrter Indizes keinen Kauf tätigen können, ist die Website möglicherweise auch offline.
Ben Lessani - Sonassi

Wir haben nur ein paar hundert Produkte und es dauert immer noch einige Minuten, um ein einfaches Produkt auf Magento 1.7 zu speichern. Für einen dedizierten Rackspace-Server zahle ich monatlich über 500 US-Dollar. Ich bin nicht sicher, wo ich anfangen soll, aber ich vermute, dass ein Index vielleicht korrupt ist. Kann jemand einen guten Magento-Berater empfehlen?
Max Hodges

5

In den meisten Magento-Webshops war es so schwierig, das Magento-Backend-Index-Management zum Laufen zu bringen. Ich habe dieses Problem oft gehabt. Das ständige Ausführen des Shell-Skripts durch den Entwickler ist häufig hektisch. Normalerweise behebe ich dieses Problem dauerhaft so.

Ich erstelle eine neue Kopie von shell / indexer.php> shell / myindexer.php

Passen Sie die Datei shell / myindexer.php in der Zeile 154 an

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

Zu

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

Fügen Sie diese Prüfung um Zeile 166 hinzu

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

Vor

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

Und dann füge ich das neue Shell-Skript zu cpanel cron hinzu, das alle 5 Minuten ausgeführt wird

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

Da das obige Shell-Skript alle 5 Minuten ausgeführt wird und nur die Prozesse neu indiziert, die neu indiziert werden müssen, verringert es das Risiko einer hohen Belastung der Server-CPU und der gesamte Prozess der Neuindizierung ist sehr schnell. Wenn kein Prozess eine Neuindizierung erfordert, wird der Neuindizierungsprozess einfach nicht ausgeführt. Denken Sie auch daran, den Neuindizierungsmodus auf der Seite "Indexverwaltung" auf "Beim Speichern aktualisieren" zu setzen. Wenn Sie es nicht wissen, können Sie diese Option unter Aktionen> Indexmodus ändern neben der Schaltfläche Senden aufrufen.


@ Changeling, du bist willkommen. Ich bin froh, dass es dich wert ist.
rbncha

Ich habe dies in mein Skript aufgenommen, falls jemand es nützlich findet: gist.github.com/steverobbins/…
Steve Robbins

4

Es wäre einfacher zu sagen, ob Sie mehr Daten angeben könnten (Inventargröße, Besucher, Maschine), aber hier ist eine Möglichkeit:

  • Wir verwenden die Sonassi_FastsearchindexErweiterung für den Katalogsuchindex. Obwohl es nur Titel, Beschreibung und SKU indiziert (ich glaube, ich habe es bemerkt), funktioniert es großartig und reduziert die Indexierungszeit für die Katalogsuche.
  • Es wird höchstwahrscheinlich einige Indexer geben, die Sie nicht ausführen müssen, z. B. für Tags oder für Produktattribute. Manchmal reicht es aus, wenn Sie nur regelmäßig nach Preisen, Artikeln, Kategorien und Katalogen suchen, die anderen möglicherweise täglich.
  • Wir synchronisieren alle zwei Stunden Produkte mit einem externen System und indizieren in der Zwischenzeit mit PHP-Skripten. Wir haben also einen Cronjob für jeden Indexer, den wir zu einer bestimmten Zeit ausführen möchten, und lassen diesen Cron das Skript ausführen. Dies scheint der beste Mittelweg zwischen dem, was der Server kann, und den aktuellen Produktdaten zu sein.

Dies läuft unter Magento CE 1.7.0.2; trotzdem ein schmerz;)


Wir haben generell Probleme mit Produkt-Flat. Alle anderen Indizes sind in Ordnung.
Ravisoni

3

Mit Dnd_Patchindexurl konnte ich die Zeit für die Neuindizierung von catalog_url_rewrite auf fast 70% verkürzen.

Ich denke, es ist eine gute Lösung, deaktivierte Produkte oder nicht sichtbare Produkte auszuschließen, damit ihre URL für nichts erstellt wird!

$ 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

Nach:

$ 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

Ich habe es auf 1.9.1.1 installiert und funktioniert sehr gut!

Kann auch über Connect installiert werden http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/


1

Upgrade auf EE 1.13. Die Indexer wurden in dieser Version stark verbessert.


2
Die meisten Kunden bevorzugen jedoch die Community-Version.
Ravisoni

1
Einverstanden. 1.8 wird in ein paar Wochen erscheinen, aber höchstwahrscheinlich werden die Optimierungen des Indexers nicht berücksichtigt. Ich mag es auch nicht, aber dies ist der einfachste, sicherste und vielleicht billigste Weg, Ihre Indexer zur Leistung zu bringen.
Paul Grigoruta

ist dies unmöglich, eine dauerhafte Lösung zu finden.
Ravisoni

In den meisten Fällen, in denen jemand so viele SKUs hat, dass er mit den vorhandenen CE 1.7-Indexern tatsächlich gegen eine Mauer stößt, sollte er EE 1.13 verwenden. Mit diesen Indexern nach CE 1.7 und EE 1.12 mit 10 bis 25.000 SKUs gibt es viele reibungslos funktionierende Sites. Der Schlüssel besteht darin, sie meist direkt auf Workflow-Ebene zu verwalten und über die richtige Infrastruktur zu verfügen.
Davidalger

CE ist eine vollkommen angemessene Wahl. Die Funktionen in EE 1.13 sind Fehlerkorrekturen - die Community ist sowieso auf CE umgestiegen. Unabhängig davon und unabhängig davon, ob Sie CE oder EE verwenden, hängt die Indizierungszeit immer vollständig von der Komplexität des Katalogs, der Serverkonfiguration, der Parallelität der Besucher und der Häufigkeit der Neuindizierung ab. EE ist kein Wundermittel und sicherlich keine geeignete Lösung für architekturbezogene Probleme.
Ben Lessani - Sonassi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.