Может кто-нибудь объяснить функцию индексации Magentos подробно? - PullRequest
14 голосов
/ 09 февраля 2011

Я понимаю, как работает индексация в Magento, но я не видел хорошей документации по этому вопросу.Я бы хотел знать следующее:

  • Как это работает
  • Какова его цель
  • Почему это важно
  • Что такоедетали, которые все должны знать об этом
  • Что-нибудь еще, что может помочь кому-то полностью понять, что такое индексация и как она используется в Magento

Я думаю, что эта информация будет полезнадля других в моей лодке, которые не в полной мере получают процесс индексации.

ОБНОВЛЕНИЕ: После комментария на мой вопрос и ответа Анкура, я думаю, что я упускаю что-то в моих знаниях просто нормального индексирования базы данных.Так что это всего лишь Magento-версия обработки индексации, и мне лучше получить мой ответ с точки зрения индексации базы данных в целом, например, этой ссылки здесь Как работает индексация базы данных?

Ответы [ 3 ]

32 голосов
/ 09 февраля 2011

Индексация 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 (в таблице attribute_values)

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

Эти результирующие таблицы поиска являются "индексами" Magento.Когда вы переиндексируете, вы взрываете старую таблицу и генерируете ее снова.

Надеюсь, это немного прояснит ситуацию!

Спасибо, Джо

8 голосов
/ 09 февраля 2011

Индексирование Magento не похоже на обычное индексирование базы данных и больше похоже на денормализацию базы данных (процесс http://en.wikipedia.org/wiki/Denormalization)). В большинстве случаев он принимает структуру EAV и делает ее доступной для структуры плоских таблиц, которая, несомненно, быстрее доступ и поиск через.

Если ваш обычный EAV-запрос будет состоять из 200 оставленных соединений, чтобы получить все продукты в каталоге и данные по их атрибутам и многослойным значениям навигации, то после «индексации» эти данные будут доступны через денормализованную структуру данных для более быстрого запроса / доступа

3 голосов
/ 09 февраля 2011

Индексация Magento чем-то похожа на обычную индексацию базы данных, но разница в том, что вам нужно сделать это вручную в некоторых случаях.

, когда вы выполняете индексацию, например, индексацию каталога, тогда она делает запись вашегоКаталог продукта в отдельной таблице для другого типа сортировки. Небольшой пример - магазин. Предположим, у вас есть продукт и разные данные для другого магазина, а затем сначала он извлечет запись из сложных объединений в отдельной таблице (когда вывыполнит индексацию)

Другой лучший пример - многоуровневая навигационная индексация: если вы запустите многоуровневую навигационную индексацию, то она проверит в базе данных товаров атрибут «все магазины по фильтру», а затем по каждому атрибуту, каким образом продукт может быть доступен.оно также будет хранить это значение.

В основном такой тип индексации требуется, если вы делаете какие-то прямые изменения в базе данных или если ваш собственный код

Пожалуйста, дайте мне знать, если у вас есть другой запрос наиндексирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...