2012-06-20 38 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

很好的解釋。 –