Может ли кто-нибудь подробно описать функцию индексации Magentos?

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

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

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

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

Ответы

Ответ 1

Индексирование 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 рубашки в моей системе (тривиальный пример), мне нужно найти:

  • product_id элемента (в таблице продуктов)
  • attribute_id для color (в таблице атрибутов)
  • Наконец, фактический value (в таблице attribute_values)

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

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

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

Спасибо, Джо

Ответ 2

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

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

Ответ 3

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

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

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

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

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