Stałe rozwiązanie typowego problemu z indeksowaniem


23

Opracowaliśmy projekt Magento z dużym zapasem zasobów i zawsze napotykamy problem z indeksowaniem. Próbowaliśmy wszystkiego, co można znaleźć w Internecie, aby rozwiązać codzienny problem z indeksowaniem, np. Obcinanie płaskich tabel i ponowne indeksowanie za pomocą interfejsu CLI, ustawiając cron dla indeksowanie, ale jest to nasz codzienny ból głowy związany z problemem indeksowania.

Szukamy Stałego rozwiązania tego problemu, pracując nad projektami istnieją różne scenariusze, takie jak codzienna aktualizacja produktów lub codzienny import produktów z innych źródeł.

Każdy, kto ma jakieś najlepsze praktyki z tym lub jakieś obejście, prosimy o podzielenie się nimi, które będą bardzo mile widziane.


Zmarnowałem rok w Magento i jego rozszerzeniach oraz jego wyjątkowo nieefektywnej i idiotycznej architekturze danych, która sprawia, że ​​witryna e-commerce z zaledwie 10 000 produktów zawodzi. Wszystkie te ostrzeżenia powinny być przekazane każdemu, kto zaczyna widzieć Magento CE. Rozwiązania Magento powinny zostać postawione przed sądem za marnowanie tysięcy osobogodzin. Po prostu pozwól bazie danych wykonać indeksowanie, nie wykonuj zadania bazy danych. Radzę, aby zamiast marnować pieniądze na dedykowany serwer, a następnie tony nieprzespanych nocnych godzin pracy, lepiej przejść na hostowaną platformę e-commerce lub otwarte oprogramowanie, które korzysta z serwera MS SQL.
semiprecious.com

Czy kiedykolwiek myślałeś, że może nie znalazłeś odpowiedniego rozszerzenia lub właściwej konfiguracji serwera? Jeśli jakieś oprogramowanie nie spełnia twoich potrzeb, niekoniecznie oznacza, że ​​jest bezużyteczne. Od ponad 5 lat zarabiam na chleb (i piwo) od Magento i mam też wielu zadowolonych klientów. Niektóre z ponad 10 000 katalogów.
Marius

Są poprawne, ponieważ sposób, w jaki działa CE, utrzymanie danych stanowi problem w przypadku skusów od 10 do 100 tysięcy. EE jest lepszy dzięki aktualizacjom indeksowania, które wprowadzili, ale dotyczy to firm o milionach dolarów przychodów. Możesz rzucić na niego hosting, ale zmienisz zwrot z inwestycji. Stosowane przez nas rozwiązanie jest bardzo wyspecjalizowane, a przesyłanie procesów delta jest podobne do rozwiązań takich jak SAP i Walmart, w połączeniu ze specjalnym rozwiązaniem cenowym (ATG-esque), które omija problem indeksowania (przeliczanie różnic kursowych i marginesów / atrybutów) w połączeniu z klastrem hosting. Prosta odpowiedź nie, Magento nie zostało zaprojektowane optymalnie.

Odpowiedzi:


31

Ważne jest, aby zrozumieć, które indeksy są powolne i dlaczego

Złożoność katalogu i docelowo architektura sklepu będą decydować o tym, jak długo zajmie ponowne indeksowanie - w połączeniu z podstawową infrastrukturą.

  • Jeśli masz 50 000 produktów i 10 wyświetleń sklepu, możesz zagwarantować, że kilka milionów wierszy catalog_url_rewritezajmie trochę czasu.

  • Jeśli masz 100 produktów, ale 5000 atrybutów można zagwarantować catalog_attributeslub catalog_product_flatstół odbędzie wiek odbudować lub spaść płasko na jego twarzy

  • Jeśli masz 1000 produktów, ale 500 atrybutów, które można przeszukiwać, catalog_fulltext_searchukończenie zajmie jeszcze wiek

Rozwiązanie każdego problemu, z którym się stykasz, nie jest uniwersalne, chodzi o prawidłowe zaprojektowanie sklepu; posiadanie odpowiedniej infrastruktury do jej obsługi i stosowanie ponownego indeksowania częstotliwości / strategii, która zarówno wspiera aktualność treści, jak i wydajność.

  • Dodanie buforowania frontonu wcale nie pomoże
  • Rzucanie więcej sprzętu w tej sytuacji może
  • Pomocne będzie uwzględnienie rozmiaru / złożoności katalogu
  • Pomocne będzie korzystanie z narzędzi indeksujących innych firm
  • Pomoże w tym eksternalizacja niektórych indeksów (np. Wyszukiwanie> SOLR)

Istnieje również przypadek oceny, czy pewne indeksy są nawet wymagane. Korzystanie z płaskiego produktu / kategorii nie zawsze przyspiesza wszystkie sklepy; widzieliśmy, że spowalnia sklepy. Może się okazać, że po przetestowaniu wydajności przed / po - nie są nawet brane pod uwagę.


8

tl; dr

Nie ma srebrnego rozwiązania. Sugeruję kilka sposobów obejścia tego problemu, Sonassi_Fastsearchindexale dotyczy to przeszukiwania katalogu.

Być może wyłączenie aktualizacji indeksu przy zapisywaniu - planowanie uruchamiania przez noc - przyniesie pewną ulgę? W połączeniu z dodaniem większej ilości pamięci podręcznej - memcached, Redis, APC - i pamięci podręcznej pełnej strony, takiej jak Varnish (jeśli używasz CE), możesz zacząć. Jeśli planujesz używać Lakieru, spójrz Nexcess_Turpentinena github, aby uzyskać szybki start.

Więcej informacji

Problemy z indeksowaniem - w szczególności catalog_url_rewrites - są dobrze znane i udokumentowane w społeczności. Magento poradził sobie z nimi w wersji Enterprise, ponieważ są to klienci, których najbardziej to dotyczy. Wielu klientów EE ma ponad 10 000 produktów i wiele wyświetleń sklepów, stron internetowych itp.

Jeśli jednak masz duży katalog i dużą liczbę atrybutów, możesz znaleźć się w sytuacji, w której indeksowanie zajmie dużo czasu - w szczególności katalog_url_rewrite, product_flat - w takim przypadku nie sugeruję naprawy czasu wykonywania indeksu długość, ale raczej odciąży część przetwarzania, aby pozwolić urządzeniu na indeksowanie cykli procesora zamiast na wyświetlanie zawartości .

Pytania, które należy sobie zadać:

  • Czy tracę biznes z powodu problemów z indeksowaniem?
  • Czy tracę wydajność z powodu problemów z indeksowaniem?
  • Czy istnieje ryzyko utraty konwersji lub czy mój współczynnik konwersji cierpi?
  • Czy moi klienci są zagrożeni zakupem produktów z magazynu, które są bezpośrednim wynikiem braku synchronizacji indeksów (zapasów itp.)
  • Czy moje zasady ustalania cen katalogowych są częścią mojej podstawowej działalności i
  • Czy mój współczynnik konwersji w wyszukiwarce w witrynie jest wyższy niż normalnie (8–10%), a zatem korzysta z lepszego indeksowania?

Nie ma srebrnego rozwiązania dla tego konkretnego problemu - jako dostawca rozwiązań powinieneś pomóc klientowi w podjęciu decyzji, która najlepiej poprawi sprzedaż i biznes przy jednoczesnym utrzymaniu niskich kosztów ogólnych.

Alternatywy

Przeładuj wyszukiwanie w katalogu i warstwową nawigację do Solr.

Skaluj w poziomie. Dodaj więcej serwerów Apache / nginx. Więcej serwerów = większa równoczesna przepustowość. To nie jest 1: 1. Nexcess ma świetny oficjalny dokument dotyczący wydajności i konfiguracji Apache tutaj: http://www.nexcess.net/magento-best-practices-whitepaper

A jeśli zdecydujesz się na Lakier - pamiętaj:

wprowadź opis zdjęcia tutaj


Doceniamy rekwizyty, ale ponowne indeksowanie nie ma nic wspólnego z buforowaniem frontonu; jest to całkowicie operacja zaplecza. Zmniejszenie obciążenia frontonu pozwoli na dłuższe ponowne indeksowanie, ale na pewno nie przyspieszy.
Ben Lessani - Sonassi 17.04.13

Chodzi mi o zmniejszenie ruchu przychodzącego do pudełka. Ostatecznym problemem jest to, że witryna stanie się niedostępna podczas indeksowania lub zostanie zablokowana na nieznany okres czasu podczas uruchamiania zadań. Na koniec dnia, gdyby indeksowanie nie miało negatywnego wpływu na interfejs użytkownika, nie miałoby znaczenia, jak długo działa zadanie. Nie ma poprawki ani poprawy w indeksowaniu czasów ładowania. Nikt nie chce odpowiedzi „Uaktualnij do wersji płatnej” - dlatego sugeruję poprawę dostępności interfejsu użytkownika i zaplanowanie, aby indeks był uruchamiany poza szczytem.
philwinkle

Oczywiście, zrozumiałem to - ale chociaż dostępność jest ważna dla strony internetowej; nie wystarczy na stronę e-commerce. Jeśli nie możesz dokonać zakupu z powodu zablokowania indeksów, witryna równie dobrze może być niedostępna.
Ben Lessani - Sonassi 17.04.13

mamy tylko kilkaset produktów i nadal trwa kilka minut, aby zapisać prosty produkt na Magento 1.7, a ja płacę ponad 500 USD miesięcznie za dedykowany serwer Rackspace. Nie jestem pewien od czego zacząć, ale podejrzewam, że jakiś indeks może być może uszkodzony. Czy ktoś może polecić dobrego konsultanta Magento?
Max Hodges

5

W większości ciężkich sklepów internetowych Magento tak trudno było uruchomić narzędzie do zarządzania indeksem Magento. Często miałem ten problem. Ciągłe uruchamianie skryptu powłoki przez dewelopera jest często gorączkowe. Zwykle naprawiam ten problem na stałe w ten sposób.

Tworzę nową kopię shell / indexer.php> shell / myindexer.php

Dostosuj shell / myindexer.php wokół linii 154

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

Do

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

i dodaj to zaznaczenie wokół linii 166

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

przed

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

A następnie dodaję nowy skrypt powłoki do cpanel cron, aby uruchamiał się co 5 minut

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

Ponieważ powyższy skrypt powłoki jest uruchamiany co 5 minut i reindeksuje tylko procesy wymagające reindeksowania, zmniejsza ryzyko dużego obciążenia procesora serwera, a cały proces reindeksowania jest bardzo szybki. Jeśli żaden proces nie wymaga ponownego indeksowania, po prostu nie uruchomi tego procesu. Pamiętaj też, aby ustawić tryb reindeksowania na „Aktualizuj przy zapisie” na stronie zarządzania indeksem. Jeśli nie wiesz, możesz uzyskać tę opcję w obszarze Działania> Zmień tryb indeksu obok przycisku Prześlij.


@changeling, nie ma za co. Cieszę się, że warto.
rbncha


4

Łatwiej byłoby powiedzieć, czy możesz podać więcej danych (wielkość inwentarza, odwiedzających, maszyny), ale oto możliwość:

  • używamy Sonassi_Fastsearchindexrozszerzenia do indeksu wyszukiwania katalogu. Chociaż indeksuje tylko tytuł, opis i SKU (myślę, że zauważyłem), działa świetnie i skraca czas indeksowania wyszukiwania katalogów.
  • najprawdopodobniej będą pewne indeksatory, których nie musisz uruchamiać, np. dla tagów lub atrybutów produktu. Czasami wystarczy, jeśli regularnie wykonujesz tylko ceny, produkty, kategorie produktów i katalogi, a inne mogą być codzienne.
  • co dwie godziny synchronizujemy produkty z systemem zewnętrznym, a tymczasem indeksujemy za pomocą skryptów php. Mamy więc cronjob dla każdego indeksatora, który chcemy uruchomić do określonego czasu, i pozwól temu cronowi wykonać skrypt. To wydaje się być najlepszym pośrednikiem między tym, co serwer może zrobić, a aktualnymi danymi produktu.

Działa na Magento CE 1.7.0.2; wciąż ból;)


Zasadniczo mamy problem z produktem płaskim, wszystkie pozostałe indeksy są w porządku.
ravisoni 16.04.13

3

używając Dnd_Patchindexurl byłem w stanie skrócić czas reindexu catalog_url_rewrite do prawie 70%

Myślę, że to dobre rozwiązanie, aby wykluczyć produkty wyłączone lub niewidoczne, aby ich adres URL został utworzony za darmo!

$ 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

Po:

$ 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

Zainstalowałem go w wersji 1.9.1.1 i działa bardzo dobrze!

Może być zainstalowany również przez Connect http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/


1

Uaktualnij do EE 1.13. W tej wersji indeksatory zostały znacznie ulepszone.


2
Ale większość klientów woli wersję społecznościową.
ravisoni

1
Zgoda. 1.8 będzie dostępny za kilka tygodni, ale najprawdopodobniej nie będzie zawierał optymalizacji indeksatora. Też mi się nie podoba, ale jest to najłatwiejszy, najbezpieczniejszy i być może najtańszy sposób na zwiększenie wydajności indeksatorów.
Paul Grigoruta,

czy niemożliwe jest znalezienie trwałego rozwiązania?
ravisoni 16.04.2013

W większości przypadków, gdy ktoś ma tak wiele jednostek SKU, że naprawdę wpada na ścianę z cegły za pomocą istniejących indeksatorów CE 1.7, powinien przejść na wersję EE 1.13. Istnieje wiele sprawnie działających witryn z tymi indeksatorami CE 1.7 i EE 1.12 posiadającymi 10-25k jednostek SKU. Kluczem jest zarządzanie nimi bezpośrednio na poziomie przepływu pracy i posiadanie odpowiedniej infrastruktury.
davidalger

CE jest całkowicie odpowiednim wyborem. Te cechy w EE 1.13 są poprawki - że Wspólnoty mają wbite CE tak. Niezależnie od tego i bez względu na to, czy korzystasz z CE, czy EE - czas indeksowania zawsze będzie całkowicie zależał od złożoności katalogu, konfiguracji serwera, współbieżności odwiedzających i częstotliwości ponownego indeksowania. EE nie jest magiczną kulą, a na pewno nie jest odpowiednim rozwiązaniem dla problemów związanych z architekturą.
Ben Lessani - Sonassi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.