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 文件的时间过长的主要内容,如果未能解决你的问题,请参考以下文章