Magento 如何优化保存多个模型?

Magento 如何优化保存多个模型?,magento,Magento,我需要手动将大量订单项目保存到数据库中。我目前正在做这样的事情: for($x=0; $x<250000; $x++) { $orderItem = Mage::getModel('sales/order_item'); $data = array('a'=>1, 'b'=>2, 'c'=>3); $orderItem->setData($data)->save(); } for($x=0;$x1,'b'=>2,'c'=>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();
}
for($x=0;$x1,'b'=>2,'c'=>3);
$orderItem->setData($data)->save();
}

试图从shell脚本运行此代码需要永远。我可以使用什么策略来加速这段代码?

我认为在这种情况下,最好的加速方法是创建自定义数据库查询


编辑:相关选项:尝试重写模型和资源模型以实现一个方法bulkSave(),该方法类似于save(),但只创建相应的查询对象并返回它,因此它实际上不使用数据库。然后收集所有的查询,并在大约每一千个项目的大事务中运行它们。

我不确定,但看看@
Mage::getModel('core/resource\u transaction')

您可以尝试在Everx amount上进行批量保存

 $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();
$batch=500;
$orderItem=Mage::getModel('sales/order_item');
$transactionSave=Mage::getModel('core/resource_transaction');
对于($x=0;$xsetData(数组('a'=>1,'b'=>2,'c'=>3));
$transactionSave->addObject($orderItem);
$orderItem->reset()
如果($x%$batch==0){
$transactionSave->save();
$transactionSave=null;
$transactionSave=Mage::getModel('core/resource_transaction');
}
}
如果($x%$batch>0)
$transactionSave->save();

这种方法肯定会更快,但这种查询的复杂性非常高。如果我真的将所有项设置为A、B、C!@Toast,你就可以对每个项进行不同的查询,并将它们全部放入字符串中,然后在数据库中执行,比如说每1000个项。或者,编写这样的查询是否太复杂请查看
Mage\u Sales\u Model\u Resource\u Order\u摘要::\u postSaveFieldsUpdate()
并使用类似的逻辑在
Mage\u Sales\u Model\u Resource\u Order\u Item
中创建公共方法。最后一条注释不能不注释。右循环,但在事务中。因此速度更快。