Jakiej wersji Magento używasz? W wersji 1.13 wprowadzono wiele zmian - spodziewaj się różnic w wersjach wcześniejszych niż ta wersja. Oto miły post na blogu wyjaśniający moduł mView i indeksowanie w wersji 1.13 Magento: eschrade.com/page/…
Pitt
Odpowiedzi:
63
Istnieją różne rodzaje indeksów w Magento.
Wszystkie indeksatory mają na celu przyspieszenie działania.
Omówię tu tylko kilka z nich.
Indeks płaski
Istnieją 2 takie indeksy. Jeden dla kategorii i jeden dla produktów.
Domyślnie kategoria i jednostki produktu (oraz klienci i adresy klientów, ale nie są ważne w tej sytuacji) są jednostkami EAV . Jest to bardzo miłe ze względu na rozszerzalność. Ale to zabójca wydajności, ponieważ aby uzyskać wszystkie wartości dla wszystkich atrybutów, potrzebujesz wielu sprzężeń lub wielu zapytań.
Tutaj zaczyna się płaski indeksator.
Przekształca strukturę EAV w strukturę płaską. Mam na myśli, że tworzy tabelę (jedną dla każdego widoku sklepu w Magento), która ma jedną kolumnę odpowiadającą atrybutowi. To sprawia, że selekcje są szybsze. W przypadku kategorii wszystkie atrybuty są konwertowane na kolumny tabeli. W przypadku produktów tylko tych, które oznaczysz jako „Używane na liście produktów”, ponieważ możesz sprzedawać wszystkie rodzaje produktów o różnych atrybutach, a utworzenie jednej tabeli z kolumnami gazillionowymi może być niemożliwe.
Ponadto niektóre produkty mogą być wyłączone lub mogą nie należeć do określonej witryny i nie trzeba ich włączać do wpisów w celu wyszukiwania. Są one wykluczone przez indeksatora.
Wygenerowane płaskie tabele służą do odczytu danych w fronend. Backend nadal korzysta ze struktury EAV.
Wyszukiwanie w katalogu Indeks
Możesz wyszukiwać produkty według wielu wartości atrybutów. Niektóre z nich mogą nie zostać uwzględnione w płaskich tabelach generowanych przez płaski indeksator. Ten indeks wypełnia tabelę wartościami atrybutów, które można przeszukiwać dla produktów, dzięki czemu łatwiej jest szukać ich na podstawie słów kluczowych. Posiadanie wszystkich informacji w jednej tabeli (lub w jednym polu) umożliwia wyszukiwanie pełnotekstowe i uzyskiwanie odpowiednich wyników.
Ceny produktów .
Na cenę produktu może wpływać wiele zmiennych. Na przykład grupa klientów, strona internetowa, reguły rabatu na katalog.
Tak jak powyżej, uzyskanie produktów z ich cenami będzie oznaczać wiele złączeń lub wielu selekcji. Ponadto produkty pakietowe mają dziwny system cenowy. Ten indeksator agreguje dane w niektórych tabelach ( catalog_product_index_price_*) i znacznie ułatwia selekcje (sortowanie i filtrowanie).
Katalog URL Rewrites
Czyści reguły przepisywania adresów URL, ustawiając, który adres URL odpowiada danemu produktowi lub kategorii. W ten sposób wewnętrzny system zarządzania adresami URL może łatwiej zdecydować, którą stronę należy wyświetlić, dzwoniąc na niestandardowy adres URL. Zamiast przeszukiwać wszystkie klucze URL produktu i kategorii, przeszukuje tylko jedną tabelę.
Produkty kategorii
W Magento możesz ustawić atrybut kategorii o nazwie „Is Anchor” na true lub false. Jeśli to prawda, oznacza to, że kategoria będzie zawierała listę wszystkich produktów z kategorii potomnych. Ponownie, określenie tego w czasie rzeczywistym zajmie więcej zasobów niż tylko czytanie jednego stołu. Ten indeksator tworzy powiązanie między produktami i kategoriami na podstawie powiązań ustawionych w backendu i flagi „Is Anchor” dla kategorii.
Stan magazynowy
W przypadku prostych produktów jest to łatwe. Mogą być w magazynie lub w magazynie, ale w przypadku konfiguracji, pogrupowania i pakowania nie jest to takie proste. Mogą być w magazynie lub w magazynie, w zależności od produktów potomnych powiązanych z głównym produktem. Znowu (powtarzam tu tylko siebie) uzyskanie ich statusu w czasie rzeczywistym oznaczałoby wiele pytań.
Atrybuty produktu .
Ten zbiera wszystkie atrybuty, których można używać w nawigacji warstwowej z tego samego powodu. Trzymanie ich wszystkich w jednym miejscu dla szybszego czytania.
Tag Aggregation
Nie mam pojęcia, co to robi. Nigdy nie używałem tagów w prawdziwym projekcie na żywo.
dzięki Mario, to jak dotąd najlepsza odpowiedź ... Mam
sonam
Co miałeś na myśli mówiąc, że płaskie stoły są używane tylko w interfejsie (a backend nadal korzysta ze struktury EAV)? Jestem nowicjuszem i z tego, co zrozumiałem, kiedy tworzymy / aktualizujemy jednostki takie jak produkty, nadal używa tabel EAV do wykonywania tych operacji i musimy ustawić opcję aktualizacji płaskich tabel po zapisaniu lub ręcznej aktualizacji dla zmiany te zostaną odzwierciedlone w płaskich tabelach. Czy mówisz o tym procesie, kiedy to powiedziałeś? Czy mógłbyś rozwinąć tę kwestię? Dzięki!
Bharadwaj Srigiriraju,
1
@Marius: Podczas ponownego indeksowania pojawia się błąd pełnej tabeli. Proszę pomóż. Błąd Dostaję jest tabela „catalog_product_index_price_bundle_sel_tmp” jest pełna
zed Czarnobrody
1
@Marius po 3 latach tej odpowiedzi, czy masz już jakieś pojęcie na temat agregacji tagów, czy jest to związane z tagami produktów?
Murtuza Zabuawala
1
@Czarny. Masz 2 ustawienia dla indeksów. „Aktualizuj po zapisaniu” i „Ręcznie”. W przypadku aktualizacji przy zapisywaniu wszystko powinno odbywać się automatycznie po zapisaniu produktu. Ale może to powodować problemy z wydajnością. Na przykład, jeśli zmienisz wiele produktów jednocześnie. W trybie ręcznym żadne ponowne indeksowanie nie jest uruchamiane natychmiast po zapisaniu, ale po zakończeniu należy ręcznie odbudować.
Indeksowanie Magento jest podobne do indeksowania na poziomie bazy danych w duchu. Jak stwierdza Anton, proces denormalizacji umożliwia szybsze działanie strony. Pozwól, że wyjaśnię niektóre przemyślenia stojące za strukturą bazy danych Magento i dlaczego indeksowanie jest konieczne do szybkiego działania.
W bardziej „typowej” bazie danych MySQL tabela do przechowywania produktów katalogowych miałaby następującą strukturę:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
Jest szybki do pobrania, ale pozostawia podstawowy problem dla części oprogramowania eCommerce: co robisz, gdy chcesz dodać więcej atrybutów? Co jeśli sprzedajesz zabawki, a nie kolumnę rozmiaru, potrzebujesz przedziału wieku? Cóż, możesz dodać kolejną kolumnę, ale powinno być jasne, że w dużym sklepie (na przykład Walmart) spowoduje to, że wiersze będą puste w 90%, a próba utrzymania nowych atrybutów jest prawie niemożliwa.
Aby zwalczyć ten problem, Magento dzieli stoły na mniejsze jednostki. Nie chcę odtwarzać całego systemu EAV w tej odpowiedzi, więc zaakceptuj ten uproszczony model:
PRODUCT:
product_id INT
sku VARCHAR
PRODUCT_ATTRIBUTE_VALUES
product_id INT
attribute_id INT
value MISC
PRODUCT_ATTRIBUTES
attribute_id
name
Teraz można dowolnie dodawać atrybuty, wprowadzając nowe wartości do atrybutów produktu, a następnie umieszczając sąsiednie rekordy w wartościach atrybutów produktu. To jest w zasadzie to, co robi Magento (z nieco większym szacunkiem dla typów danych niż tutaj pokazałem). W rzeczywistości teraz nie ma powodu, aby dwa produkty w ogóle miały identyczne pola, więc możemy tworzyć całe typy produktów z różnymi zestawami atrybutów!
Ta elastyczność wiąże się jednak z pewnymi kosztami. Jeśli chcę znaleźć kolor koszulki w moim systemie (trywialny przykład), muszę znaleźć:
ID_produktu produktu (w tabeli produktów)
Atrybut_id dla koloru (w tabeli atrybutów)
Wreszcie rzeczywista wartość (w tabeli wartości atrybutów)
Magento działało w ten sposób, ale było to bardzo powolne. Dlatego, aby umożliwić lepszą wydajność, zdecydowali się na kompromis: gdy właściciel sklepu zdefiniuje pożądane atrybuty, śmiało i od samego początku generuj duży stół. Gdy coś się zmieni, oderwij go od kosmosu i wygeneruj ponownie. W ten sposób dane są przechowywane głównie w naszym ładnym, elastycznym formacie, ale są sprawdzane z jednej tabeli.
Te wynikowe tabele wyszukiwania są „indeksami” Magento. Podczas ponownego indeksowania wysadzasz starą tabelę i generujesz ją ponownie.
Magento to dość potężny i złożony system. Pozwala pracować z ogromną ilością danych, ale gdy baza danych jest przepełniona tonami rekordów, staje się ciężka i powolna. Magento używa indeksów do rozwiązania tego problemu. Indeksy to dodatkowe tabele bazy danych z pewnymi płaskimi danymi, które pozwalają organizować szybkie odpowiedzi z bazy danych.
Domyślnie system podstawowy aktualizuje indeksy zapisu każdego elementu. Ale w niektórych przypadkach musisz to zrobić ręcznie, na przykład niektóre rodzaje akcji masowych itp. Możesz zaktualizować indeksy w dowolnym momencie z zaplecza administratora (Administrator-> System-> Zarządzanie indeksami). Ale czasami powoduje problemy.
Na przykład, jeśli masz ponad 10 000 produktów i wiele kategorii, przebudowa indeksu „przepisanie adresu URL katalogu” może potrwać kilka godzin. Wtedy skrypt php może się zepsuć z powodu przekroczenia max_execution_time. Istnieje sposób na rozwiązanie kilku problemów poprzez uruchomienie procesu ponownego indeksowania z wiersza poleceń.
Odpowiedzi:
Istnieją różne rodzaje indeksów w Magento.
Wszystkie indeksatory mają na celu przyspieszenie działania.
Omówię tu tylko kilka z nich.
Indeks płaski
Istnieją 2 takie indeksy. Jeden dla kategorii i jeden dla produktów.
Domyślnie kategoria i jednostki produktu (oraz klienci i adresy klientów, ale nie są ważne w tej sytuacji) są jednostkami EAV . Jest to bardzo miłe ze względu na rozszerzalność. Ale to zabójca wydajności, ponieważ aby uzyskać wszystkie wartości dla wszystkich atrybutów, potrzebujesz wielu sprzężeń lub wielu zapytań.
Tutaj zaczyna się płaski indeksator.
Przekształca strukturę EAV w strukturę płaską. Mam na myśli, że tworzy tabelę (jedną dla każdego widoku sklepu w Magento), która ma jedną kolumnę odpowiadającą atrybutowi. To sprawia, że selekcje są szybsze. W przypadku kategorii wszystkie atrybuty są konwertowane na kolumny tabeli. W przypadku produktów tylko tych, które oznaczysz jako „Używane na liście produktów”, ponieważ możesz sprzedawać wszystkie rodzaje produktów o różnych atrybutach, a utworzenie jednej tabeli z kolumnami gazillionowymi może być niemożliwe.
Ponadto niektóre produkty mogą być wyłączone lub mogą nie należeć do określonej witryny i nie trzeba ich włączać do wpisów w celu wyszukiwania. Są one wykluczone przez indeksatora.
Wygenerowane płaskie tabele służą do odczytu danych w fronend. Backend nadal korzysta ze struktury EAV.
Wyszukiwanie w katalogu Indeks
Możesz wyszukiwać produkty według wielu wartości atrybutów. Niektóre z nich mogą nie zostać uwzględnione w płaskich tabelach generowanych przez płaski indeksator. Ten indeks wypełnia tabelę wartościami atrybutów, które można przeszukiwać dla produktów, dzięki czemu łatwiej jest szukać ich na podstawie słów kluczowych. Posiadanie wszystkich informacji w jednej tabeli (lub w jednym polu) umożliwia wyszukiwanie pełnotekstowe i uzyskiwanie odpowiednich wyników.
Ceny produktów .
Na cenę produktu może wpływać wiele zmiennych. Na przykład grupa klientów, strona internetowa, reguły rabatu na katalog.
Tak jak powyżej, uzyskanie produktów z ich cenami będzie oznaczać wiele złączeń lub wielu selekcji. Ponadto produkty pakietowe mają dziwny system cenowy. Ten indeksator agreguje dane w niektórych tabelach (
catalog_product_index_price_*
) i znacznie ułatwia selekcje (sortowanie i filtrowanie).Katalog URL Rewrites
Czyści reguły przepisywania adresów URL, ustawiając, który adres URL odpowiada danemu produktowi lub kategorii. W ten sposób wewnętrzny system zarządzania adresami URL może łatwiej zdecydować, którą stronę należy wyświetlić, dzwoniąc na niestandardowy adres URL. Zamiast przeszukiwać wszystkie klucze URL produktu i kategorii, przeszukuje tylko jedną tabelę.
Produkty kategorii
W Magento możesz ustawić atrybut kategorii o nazwie „Is Anchor” na true lub false. Jeśli to prawda, oznacza to, że kategoria będzie zawierała listę wszystkich produktów z kategorii potomnych. Ponownie, określenie tego w czasie rzeczywistym zajmie więcej zasobów niż tylko czytanie jednego stołu. Ten indeksator tworzy powiązanie między produktami i kategoriami na podstawie powiązań ustawionych w backendu i flagi „Is Anchor” dla kategorii.
Stan magazynowy
W przypadku prostych produktów jest to łatwe. Mogą być w magazynie lub w magazynie, ale w przypadku konfiguracji, pogrupowania i pakowania nie jest to takie proste. Mogą być w magazynie lub w magazynie, w zależności od produktów potomnych powiązanych z głównym produktem. Znowu (powtarzam tu tylko siebie) uzyskanie ich statusu w czasie rzeczywistym oznaczałoby wiele pytań.
Atrybuty produktu .
Ten zbiera wszystkie atrybuty, których można używać w nawigacji warstwowej z tego samego powodu. Trzymanie ich wszystkich w jednym miejscu dla szybszego czytania.
Tag Aggregation
Nie mam pojęcia, co to robi. Nigdy nie używałem tagów w prawdziwym projekcie na żywo.
źródło
Nie można tego przypisać, ponieważ pochodzi z oryginalnego postu pod adresem : https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail
Indeksowanie Magento jest podobne do indeksowania na poziomie bazy danych w duchu. Jak stwierdza Anton, proces denormalizacji umożliwia szybsze działanie strony. Pozwól, że wyjaśnię niektóre przemyślenia stojące za strukturą bazy danych Magento i dlaczego indeksowanie jest konieczne do szybkiego działania.
W bardziej „typowej” bazie danych MySQL tabela do przechowywania produktów katalogowych miałaby następującą strukturę:
Jest szybki do pobrania, ale pozostawia podstawowy problem dla części oprogramowania eCommerce: co robisz, gdy chcesz dodać więcej atrybutów? Co jeśli sprzedajesz zabawki, a nie kolumnę rozmiaru, potrzebujesz przedziału wieku? Cóż, możesz dodać kolejną kolumnę, ale powinno być jasne, że w dużym sklepie (na przykład Walmart) spowoduje to, że wiersze będą puste w 90%, a próba utrzymania nowych atrybutów jest prawie niemożliwa.
Aby zwalczyć ten problem, Magento dzieli stoły na mniejsze jednostki. Nie chcę odtwarzać całego systemu EAV w tej odpowiedzi, więc zaakceptuj ten uproszczony model:
Teraz można dowolnie dodawać atrybuty, wprowadzając nowe wartości do atrybutów produktu, a następnie umieszczając sąsiednie rekordy w wartościach atrybutów produktu. To jest w zasadzie to, co robi Magento (z nieco większym szacunkiem dla typów danych niż tutaj pokazałem). W rzeczywistości teraz nie ma powodu, aby dwa produkty w ogóle miały identyczne pola, więc możemy tworzyć całe typy produktów z różnymi zestawami atrybutów!
Ta elastyczność wiąże się jednak z pewnymi kosztami. Jeśli chcę znaleźć kolor koszulki w moim systemie (trywialny przykład), muszę znaleźć:
Magento działało w ten sposób, ale było to bardzo powolne. Dlatego, aby umożliwić lepszą wydajność, zdecydowali się na kompromis: gdy właściciel sklepu zdefiniuje pożądane atrybuty, śmiało i od samego początku generuj duży stół. Gdy coś się zmieni, oderwij go od kosmosu i wygeneruj ponownie. W ten sposób dane są przechowywane głównie w naszym ładnym, elastycznym formacie, ale są sprawdzane z jednej tabeli.
Te wynikowe tabele wyszukiwania są „indeksami” Magento. Podczas ponownego indeksowania wysadzasz starą tabelę i generujesz ją ponownie.
Mam nadzieję, że to trochę wyjaśni!
źródło
nuke it from space
, miło :)Magento to dość potężny i złożony system. Pozwala pracować z ogromną ilością danych, ale gdy baza danych jest przepełniona tonami rekordów, staje się ciężka i powolna. Magento używa indeksów do rozwiązania tego problemu. Indeksy to dodatkowe tabele bazy danych z pewnymi płaskimi danymi, które pozwalają organizować szybkie odpowiedzi z bazy danych.
Domyślnie system podstawowy aktualizuje indeksy zapisu każdego elementu. Ale w niektórych przypadkach musisz to zrobić ręcznie, na przykład niektóre rodzaje akcji masowych itp. Możesz zaktualizować indeksy w dowolnym momencie z zaplecza administratora (Administrator-> System-> Zarządzanie indeksami). Ale czasami powoduje problemy.
Na przykład, jeśli masz ponad 10 000 produktów i wiele kategorii, przebudowa indeksu „przepisanie adresu URL katalogu” może potrwać kilka godzin. Wtedy skrypt php może się zepsuć z powodu przekroczenia max_execution_time. Istnieje sposób na rozwiązanie kilku problemów poprzez uruchomienie procesu ponownego indeksowania z wiersza poleceń.
źródło