2012-06-23 4 views
0

업데이트 할 인벤토리 데이터가 포함 된 큰 CSV 파일 (35,000 개가 넘는 행)이 있습니다. Mage_Catalog_Model_Convert_Adapter_Productimport를 확장하여 인벤토리 업데이트를 수행하는 메소드를 만들었습니다. 그런 다음 고급 프로파일을 사용하여 해당 메소드를 호출하는 업데이트를 수행했습니다.Magento 데이터 흐름이 CSV 파일을로드하는 데 너무 오래 걸립니다.

프로필을 수동으로 실행할 때 매우 효과적입니다. 문제는 cronjob에서 실행중인 프로필을 처리하는 확장 프로그램을 사용하면 시스템이 CSV 파일을로드하고 구문 분석하는 데 너무 오래 걸립니다. 오전 6시 15 분에 매일 실행되도록 cronjob을 설정했지만 파일의 첫 번째 행은 같은 날 오후 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 파일을 구문 분석하는 클래스입니다. 너무 많은 메모리가 필요합니다.

기능 ('I 메모리 하늘에 가까운 로그인 할 때마다 메시지와 함께'), 메모리 양이 사용 피크 메모리 사용량

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 (동일한 파일 이름 사용)를 분리하고 작업을 여러 번 호출 할 수 있습니다. 이전 통화가 새 통화와 같은 시간에 실행되지 않도록해야합니다.

감사합니다.

관련 문제