Mysql
 sql >> база данни >  >> RDS >> Mysql

Може ли някой да обясни подробно функцията за индексиране на Magentos?

Индексирането на Magento е подобно само на индексирането на ниво база данни по дух. Както Антон заявява, това е процес на денормализация, за да позволи по-бърза работа на сайт. Нека се опитам да обясня някои от мислите зад структурата на базата данни Magento и защо тя прави индексирането необходимо за бърза работа.

В по-„типична“ MySQL база данни таблица за съхранение на каталожни продукти ще бъде структурирана по следния начин:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Това е бързо за извличане, но оставя основен проблем за част от софтуера за електронна търговия:какво правите, когато искате да добавите още атрибути? Ами ако продавате играчки и вместо колона за размер, имате нужда от age_range ? Е, бихте могли да добавите още една колона, но трябва да е ясно, че в голям магазин (помислете за Walmart, например) това ще доведе до редове, които са 90% празни и опитът за поддържане на нови атрибути е почти невъзможен.

За да се бори с този проблем, Magento разделя таблиците на по-малки единици. Не искам да пресъздавам цялата EAV система в този отговор, така че, моля, приемете този опростен модел:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Сега е възможно да добавяте атрибути по желание чрез въвеждане на нови стойности в product_attributes и след това поставяне на съседни записи в product_attribute_values . Това основно прави Magento (с малко повече уважение към типовете данни, отколкото съм показал тук). Всъщност сега няма причина два продукта изобщо да имат идентични полета, така че можем да създаваме цели типове продукти с различни набори от атрибути!

Тази гъвкавост обаче има цена. Ако искам да намеря color на риза в моята система (тривиален пример), трябва да намеря:

  1. product_id на артикула (в продуктовата таблица)
  2. attribute_id за color (в таблицата с атрибути)
  3. Накрая, действителната value (в таблицата атрибут_values)

Magento работеше така, но беше мъртво бавно. Така че, за да позволят по-добра производителност, те направиха компромис:след като собственикът на магазина определи атрибутите, които иска, продължете напред и генерирайте голямата маса от самото начало. Когато нещо се промени, изхвърлете го от космоса и го генерирайте отново. По този начин данните се съхраняват предимно в нашия приятен гъвкав формат, но се заявяват от една таблица.

Тези получени справочни таблици са "индексите" на Magento. Когато преиндексирате, вие взривявате старата таблица и я генерирате отново.

Надявам се, че това малко изяснява нещата!

Благодаря, Джо



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. virtualenv pip mysqldb mac os X python

  2. как да промените времето за изчакване за постоянни връзки на mysql

  3. Как да инсталирате MySQL 8.0 на RHEL/CentOS 8/7 и Fedora 35

  4. Как да нулирате Root парола в MySQL 8.0

  5. Управление на потребителски акаунт, роли, разрешения, удостоверяване PHP и MySQL - част 2