2012-06-23 41 views
0

我有一个包含要更新的库存数据的大CSV文件(超过35,000行)。我创建了一个方法来扩展Mage_Catalog_Model_Convert_Adapter_Productimport来执行清单更新。然后,我使用高级配置文件进行调用该方法的更新。Magento数据流花费太长时间才能加载CSV文件

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

这使得过程在中途停下来,不到1/3的记录正在处理。试图找出原因,试图解决问题,但没有运气,我一直很沮丧。

任何想法,将不胜感激。

+1

这似乎很奇怪,它是“7小时”加载文件。你确认它实际上是早上6点15分开始的吗?我的猜测是,有一些[误区与时区](http://stackoverflow.com/questions/7580582/magento-cron-tab-job-time-zone) – nachito

+1

我会记录方法的鼻涕出来的方法你已经创建。将它记录到你自己的日志文件Mage :: log('blah blah',null,'yourlogfile.log');'所以你可以看到发生了什么 – CCBlackburn

+0

确保你每次迭代只处理许多行您的服务器资源允许(number_of_records)。 – benmarks

回答

0

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->日志(“随着每次登录存储器更接近天空消息”);

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

谢谢

相关问题