3

非常に多くの注文項目を手動でデータベースに保存する必要があります。私は現在、次のようなことをしています:

for($x=0; $x<250000; $x++)
{
    $orderItem = Mage::getModel('sales/order_item');
    $data = array('a'=>1, 'b'=>2, 'c'=>3);  
    $orderItem->setData($data)->save();
}

シェル スクリプトからこのコードを実行しようとすると、永遠に時間がかかります。このコードを高速化するには、どのような戦略を使用できますか?

4

2 に答える 2

5

よくわかりませんが、@をご覧くださいMage::getModel('core/resource_transaction')

https://stackoverflow.com/a/4879133/1191288を参照してください

Xの金額をまとめて節約してみてください

 $batch = 500;
 $orderItem = Mage::getModel('sales/order_item');
 $transactionSave = Mage::getModel('core/resource_transaction');

 for($x=0; $x<250000; $x++){
     $orderItem->setData( array('a'=>1, 'b'=>2, 'c'=>3));
     $transactionSave->addObject($orderItem);
     $orderItem->reset()
     if ($x % $batch == 0){
        $transactionSave->save();
        $transactionSave = null;
        $transactionSave = Mage::getModel('core/resource_transaction');
     }
 }

 if($x % $batch > 0)
   $transactionSave->save();
于 2013-01-04T22:54:45.283 に答える
3

この状況では、これを大幅に高速化するための最善の策は、カスタム データベース クエリを作成することだと思います。

編集: 関連オプション: モデルとリソース モデルを書き直して、save() に似ているが、対応するクエリ オブジェクトを作成して返すだけなので、実際にはデータベースを使用しないメソッド bulkSave() を実装してみてください。次に、すべてのクエリを収集し、1,000 アイテムごとに大きなトランザクションで実行します。

于 2013-01-04T22:18:54.067 に答える