Magento 数据流加载 CSV 文件的时间过长

Posted

技术标签:

【中文标题】Magento 数据流加载 CSV 文件的时间过长【英文标题】:Magento dataflow takes too long to load CSV file 【发布时间】:2012-06-25 15:03:30 【问题描述】:

我有一个包含要更新的库存数据的大型 CSV 文件(超过 35,000 行)。我创建了一个扩展 Mage_Catalog_Model_Convert_Adapter_Productimport 的方法来进行库存更新。然后我使用高级配置文件来进行调用该方法的更新。

当我手动运行配置文件时,它运行良好。问题是当我使用处理在 cronjob 中运行的配置文件的扩展时,系统加载和解析 CSV 文件需要很长时间。我将 cronjob 设置为每天早上 6:15 运行,但文件的第一行直到当天下午 1:20 才会处理,加载文件需要 7 个小时。

这使得进程以某种方式在中间停止,只有不到 1/3 的记录被处理。我一直很沮丧试图找出原因,试图解决问题,但没有运气。

任何想法都将不胜感激。

【问题讨论】:

加载文件需要“7 小时”似乎很奇怪。你确认它实际上是从早上 6 点 15 分开始的吗?我的猜测是有一些misunderstanding with the timezones 我会从您创建的方法中记录鼻涕。将其记录到您自己的日志文件 Mage::log('blah blah', null, 'yourlogfile.log');,以便您查看发生了什么 确保每次迭代只处理服务器资源允许的行数(number_of_records)。 【参考方案1】:

Varien_File_Csv 是解析 csv 文件的类。 它占用了太多内存。

记录内存使用量和峰值内存使用量的功能,

public function log($msg, $level = null)

if (is_null($level)) $level = Zend_Log::INFO;

$units = array('b', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb');
$m = memory_get_usage();
$mem = @round($m / pow(1024, ($i = floor(log($m, 1024)))), 2).' '.$units[$i];
$mp = memory_get_peak_usage();
$memp = @round($mp / pow(1024, ($ip = floor(log($mp, 1024)))), 2).' '.$units[$ip];

$msg = sprintf('(mem %4.2f %s, %4.2f %s) ', $mem, $units[$i], $memp, $units[$ip]).$msg;

Mage::log($msg, $level, 'my_log.log', 1);

$MyClass->log('每记录一条消息,记忆就更接近天空');

您可以拆分 csv(使用相同的文件名)并多次调用该作业。您需要确保之前的呼叫不会与新的呼叫同时运行。

谢谢

【讨论】:

以上是关于Magento 数据流加载 CSV 文件的时间过长的主要内容,如果未能解决你的问题,请参考以下文章

Magento 数据流(高级)配置文件,默认值

在 magento 中导入 csv 产品时出错

如何在Magento(麦进斗)导入CSV文件中的产品价格的变化?

如何实现Magento产品批量导入

在 magento 产品导入数据流配置文件中显示 SKU

修改Magento默认Export Customers功能