2012-06-20 33 views
10

我与保存类别时提高性能玩,我发现,一旦类是通过Magenti API或后端更新那么下面的更新查询被称为什么是Magento的index_event表

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;} 

谁能告诉我是什么这是否意味着会发生?它看起来像一些索引操作被推送到一个队列,但它什么时候执行?

回答

17

您的假设“它看起来像一些索引操作被推送到队列”是正确的。

回答你的问题“但它什么时候执行?”

一些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 

例如,队列索引的事件。主要在删除之前和/或提交之后。

他们通过调用Mage_Index_Model_Indexer类的logEvent()processEntityAction()方法来完成此操作。

  • 如果他们直接调用logEvent(),索引事件将仅排队。 Reindexing甚至不会被尝试。

  • 如果他们呼叫processEntityAction(),索引事件也会排队,但Magento会尝试在排队后立即处理这个索引事件。

还有第三种方法Mage_Index_Model_Indexer::indexEvents()被某些模块调用。前两者的区别在于,indexEvents()确实不是队列中的任何索引事件,而只会尝试立即重新索引。

请注意,如果相应索引类型的进程模式为Mage_Index_Model_Process::MODE_REAL_TIME,则只有通过processEntityAction()indexEvents()的任何重新索引才会发生。

您可以通过System -> Index Management进行检查。如果Mode列的值为更新保存,则该索引设置为MODE_REAL_TIME

如果它读取的是手动更新,则它被设置为Mage_Index_Model_Process::MODE_MANUAL,这意味着根本不会发生自动重新索引。

在后一种情况下,您需要手动触发reindexing进程以重新为您的数据进行索引。这可以使用几种方法来实现,例如,通过在命令行上使用System -> Index Management -> Index -> Reindex data -> Submit或使用Magento shell/indexer.php,或者编写由cron作业启动的索引器进程集合处理脚本。

+0

你有没有听说过任何magento修改,可以让事情排队,然后在某个时间通过shell索引器处理它们?索引商是我们商店的一大痛点。 – runamok

+0

这是一篇旧帖子,但对于任何正在查看的用户来说 - 那里有一些插件会延迟索引以便加快管理面板产品/类别操作的速度。例如[Mirasvit的异步重新索引](http://mirasvit.com/magento-extensions/magento-asynchronous-reindex.html) – augsteyer

+0

很好的解释。 –