Indeksowanie Magento jest podobne do indeksowania na poziomie bazy danych w duchu. Jak twierdzi Anton, jest to proces denormalizacji umożliwiający szybsze działanie witryny. Spróbuję wyjaśnić niektóre myśli stojące za strukturą bazy danych Magento i dlaczego indeksowanie jest niezbędne do szybkiego działania.
W bardziej "typowej" bazie danych MySQL, tabela do przechowywania produktów z katalogu miałaby następującą strukturę:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
Jest to szybkie do odzyskania, ale pozostawia fundamentalny problem dla oprogramowania eCommerce:co robisz, gdy chcesz dodać więcej atrybutów? A co, jeśli sprzedajesz zabawki, a zamiast kolumny z rozmiarami potrzebujesz age_range
? Cóż, możesz dodać kolejną kolumnę, ale powinno być jasne, że w dużym sklepie (na przykład Walmart) spowoduje to wiersze, które są w 90% puste, a próba utrzymania nowych atrybutów jest prawie niemożliwa.
Aby rozwiązać ten problem, Magento dzieli stoły na mniejsze jednostki. W tej odpowiedzi nie chcę odtwarzać całego systemu EAV, 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 w product_attributes
a następnie umieszczanie sąsiadujących rekordów w product_attribute_values
. To jest w zasadzie to, co robi Magento (z nieco większym szacunkiem dla typów danych, niż pokazałem tutaj). W rzeczywistości teraz nie ma powodu, aby dwa produkty miały w ogóle identyczne pola, więc możemy tworzyć całe typy produktów z różnymi zestawami atrybutów!
Jednak ta elastyczność ma swoją cenę. Jeśli chcę znaleźć color
koszulki w moim systemie (trywialny przykład), muszę znaleźć:
product_id
pozycji (w tabeli produktów)attribute_id
dlacolor
(w tabeli atrybutów)- Na koniec rzeczywista
value
(w tabeli atrybuty_wartości)
Magento działał w ten sposób, ale był śmiertelnie powolny. Tak więc, aby umożliwić lepszą wydajność, poszli na kompromis:gdy właściciel sklepu określi pożądane atrybuty, śmiało generuj dużą tabelę od początku. Kiedy coś się zmieni, wystrzel to z kosmosu i wygeneruj ponownie. W ten sposób dane są przechowywane głównie w naszym przyjemnym, elastycznym formacie, ale odpytywane z jednej tabeli.
Te wynikowe tabele przeglądowe to „indeksy” Magento. Kiedy ponownie indeksujesz, wysadzasz starą tabelę i generujesz ją ponownie.
Mam nadzieję, że to trochę wyjaśni sprawę!
Dzięki, Joe