0

製品をインポートするモジュールを作成しました。現在、Magentoの製品モデルを使用して、それに応じて製品を追加/更新しています。ただし、これは非常に遅いことが証明されています(おそらく、カタログインデックスを有効にしているためですか?)。

ただやるだけでも

$product = Mage::getModel('catalog/product')->load($id);
$product->save();

信じられないほど遅い-製品ごとにおそらく2秒話しています(私はhttpリクエストごとに5を実行し、javascriptを使用していくつかのリクエストを作成しています)。

各製品では、いくつかの属性を更新し、カテゴリIDを変更し、在庫レベルを更新する必要があります。現在、20個の製品をループしていますが、60秒近くかかります。本番環境では、200〜300の製品をループします(ただし、はるかに強力なサーバー上にあります)。

製品を作成/更新するためのより良い/より速い方法はありますか?もちろん、SQLを使用することもできますが、Magentoの強力なEAVデータベース構造を理解するのは好きではありません。

これがナフな質問である場合は申し訳ありませんが、どのように表現すればよいかわかりません。

4

1 に答える 1

1

インポート中にインデクサーモードを手動に設定すると、少なくともある程度のパフォーマンスが向上します。これは明らかに管理領域で設定できますが、スクリプトを使用して設定することもできます。

//Set to manual mode
$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach($processCollection as $process) {
    $process
        ->setMode(Mage_Index_Model_Process::MODE_MANUAL)
        ->save();
}

//Set back to real time mode
$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach($processCollection as $process) {
    $process
        ->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)
        ->save();
}

インポート後にスクリプトで直接インデックスを再作成する方法を探している場合...

$processCollection = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach($processCollection as $process) {
      $process
         ->reindexEverything();
}

しかし、Magmihttp://sourceforge.net/projects/magmi/files/magmi-0.7/)は、製品のインポートが驚くほど高速であるだけでなく、いくつかの非常に優れた機能も提供します。

私はMagento用の他の製品インポートツールが同じくらい速いことを知りません(他の誰かが同じくらい速いか速いものを知っているなら興味がありますか?)

于 2012-08-02T16:34:23.297 に答える