Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy ktoś może szczegółowo wyjaśnić funkcję Magentos Indexing?

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źć:

  1. product_id pozycji (w tabeli produktów)
  2. attribute_id dla color (w tabeli atrybutów)
  3. 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odmowa dostępu dla użytkownika 'root'@'localhost' z PHPMyAdmin

  2. Jak ZAMÓWIĆ WEDŁUG PRZYPADKU w Doctrine2 (Symfony2)

  3. Wstawianie zmiennych MySQL za pomocą Pythona, nie działa

  4. Weryfikacja nie powiodła się dla zapytania dla metody JPQL

  5. Jak poprawnie zapętlić funkcję składowaną w MySQL?