Что такое таблица Magento index_event

Я играю с улучшением производительности во время сохранения категории, и я обнаружил, что как только категория обновляется через Magenti API или backend, тогда следующий запрос на обновление называется

SQL: UPDATE `index_event` SET `event_id` = ?, `type` = ?, `entity` = ?, `entity_pk` = ?, `created_at` = ?, `old_data` = ?, `new_data` = ? WHERE (event_id='13066')
BIND: Array
(
    [0] => 13066
    [1] => save
    [2] => catalog_category
    [3] => 2867
    [4] => 2011-09-22 13:50:54
    [5] => a:4:{s:30:"Mage_Catalog_Model_Indexer_Url";N;s:40:"Mage_Catalog_Model_Category_Indexer_Flat";N;s:43:"Mage_Catalog_Model_Category_Indexer_Product";N;s:41:"Mage_CatalogSearch_Model_Indexer_Fulltext";N;}
    [6] => a:11:{s:35:"cataloginventory_stock_match_result";b:0;s:34:"catalog_product_price_match_result";b:0;s:24:"catalog_url_match_result";b:1;s:30:"Mage_Catalog_Model_Indexer_Url";N;s:33:"catalog_product_flat_match_result";b:0;s:34:"catalog_category_flat_match_result";b:1;s:40:"Mage_Catalog_Model_Category_Indexer_Flat";N;s:37:"catalog_category_product_match_result";b:1;s:43:"Mage_Catalog_Model_Category_Indexer_Product";N;s:35:"catalogsearch_fulltext_match_result";b:1;s:41:"Mage_CatalogSearch_Model_Indexer_Fulltext";N;}

Может ли кто-нибудь сказать мне, что это значит и что произойдет? Похоже, что некоторые действия индексирования переносятся в очередь, но когда они выполняются?

Ответ 1

Ваше предположение: "Похоже, что некоторые действия индексирования выведены в очередь". Правильно.

Чтобы ответить на ваш вопрос "но когда он выполняется?":

Некоторые модели Magento, например

Mage_Core_Model_Store
Mage_Catalog_Model_Product
Mage_Catalog_Model_Category
Mage_CatalogInventory_Model_Stock_Item
Mage_Tag_Model_Tag
Mage_Tag_Model_Tag_Relation

например, события индекса очереди. В основном перед удалением и/или после совершения.

Они делают это путем вызова метода logEvent() или processEntityAction() класса Mage_Index_Model_Indexer.

  • Если они вызывают logEvent() напрямую, событие индекса будет только поставлено в очередь. Реиндексирование даже не будет проверено.

  • Если они вызовут processEntityAction(), событие индекса будет поставлено в очередь, но Magento попытается обработать это событие индекса после очередей.

Также третий модуль Mage_Index_Model_Indexer::indexEvents() вызывается некоторыми модулями. Разница с предыдущими двумя заключается в том, что indexEvents() не ставит в очередь какое-либо событие индекса, но будет пытаться сразу переиндексировать.

Обратите внимание, что любое переиндексирование через processEntityAction() и indexEvents() произойдет только в том случае, если режим процесса соответствующего типа индекса Mage_Index_Model_Process::MODE_REAL_TIME.

Вы можете проверить это через System -> Index Management. Если столбец Mode читает "Обновление при сохранении", значение этого индекса равно MODE_REAL_TIME.

Если вместо этого он читает "Обновление вручную", он устанавливается на Mage_Index_Model_Process::MODE_MANUAL, что означает, что автоматическое переиндексация никогда не произойдет вообще.

В последнем случае вам нужно вручную запустить процессы переиндексации, чтобы ваши данные были повторно проиндексированы. Это может быть достигнуто с использованием нескольких способов, например. с помощью System -> Index Management -> Index -> Reindex data -> Submit или с помощью Magento shell/indexer.php в командной строке или путем написания собственной обработки процесса обработки индексатора, запускаемой заданием cron.