10

カテゴリの保存中にパフォーマンスを改善しようとしていますが、Magenti API またはバックエンドを介してカテゴリが更新されると、次の更新クエリが呼び出されることがわかりました

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

誰がそれが何を意味し、何が起こるか教えてもらえますか? 一部のインデックス作成アクションがキューにプッシュされているようですが、いつ実行されますか?

4

1 に答える 1

21

「一部のインデックス作成アクションがキューにプッシュされているようです」という仮定は正しいです。

あなたの質問に答えるために「しかしそれはいつ実行されますか?」

のようないくつかの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()一部のモジュールによって呼び出される3番目のメソッドもあります。前の2つとの違いは、インデックスイベントindexEvents()キューに入れず、ただちにインデックスを再作成しようとすることです。

対応するインデックスタイプのプロセスモードがである場合にのみprocessEntityAction()、インデックスの再作成が行われることに注意してください。indexEvents()Mage_Index_Model_Process::MODE_REAL_TIME

これはを介して確認できますSystem -> Index ManagementModeに「保存時に更新」と表示されている場合、そのインデックスはに設定されていMODE_REAL_TIMEます。

代わりに手動更新と表示されている場合は、に設定されてMage_Index_Model_Process::MODE_MANUALいます。これは、自動インデックスの再作成がまったく行われないことを意味します。

後者の場合、データのインデックスを再作成するには、インデックスの再作成プロセスを手動でトリガーする必要があります。これは、コマンドラインでSystem -> Index Management -> Index -> Reindex data -> Submitを使用するか、Magentoを使用するか、cronジョブによって開始される独自のインデクサープロセスコレクション処理をスクリプト化するなど、いくつかの方法を使用して実現できます。shell/indexer.php

于 2012-06-20T16:16:15.597 に答える