У меня довольно большой файл CSV с 4 миллионами записей с 375 полями, которые необходимо обработать. Я использую библиотеку Ruby CSV для чтения этого файла, и это очень медленно. Я думал, что обработка файлов PHP CSV была медленной, но, сравнивая два чтения, PHP более чем в 100 раз быстрее. Я не уверен, что я делаю что-то глупое, или это просто реальность того, что Ruby не оптимизирован для такого типа пакетной обработки. Я установил простые тестовые pgms, чтобы получить сравнительные времена как в Ruby, так и в PHP. Все, что я делаю, читается, не пишет, не строит большие массивы и не выходит из циклов чтения CSV после обработки 50 000 записей. Кто-нибудь еще испытал эту проблему с производительностью?Почему файл Ruby CSV читается очень медленно?
Я работаю локально на MAC с 4-х гигабайтной памятью, работает OS X 10.6.8 и Ruby 1.8.7.
Процесс Ruby занимает 497 секунд, чтобы просто читать 50 000 записей, процесс PHP работает через 4 секунды, что не является опечаткой, это более чем в 100 раз быстрее. FYI. У меня был код в циклах, чтобы распечатать данные, чтобы убедиться, что каждый из процессов фактически просматривает файлы и возвращает данные.
Это рубин Код:
require('time')
require('csv')
x=0
t1=Time.new
CSV.foreach(pathfile) do |row|
x += 1
if x > 50000 then break end
end
t2 = Time.new
puts " Time to read the file was #{t2-t1} seconds"
Вот PHP код:
$t1=time();
$fpiData = fopen($pathdile,'r') or die("can not open input file ");
$seqno=0;
while($inrec = fgetcsv($fpiData,0,',','"')) {
if ($seqno > 50000) break;
$seqno++;
}
fclose($fpiData) or die("can not close input data file");
$t2=time();
$t3=$t2-$t1;
echo "Start time is $t1 - end time is $t2 - Time to Process was " . $t3 . "\n";
В чем ваш вопрос? –
Сначала обновите свой Ruby. 1.8.7 имел медленный CSV, плюс, по сравнению с сегодняшним Ruby v2.0, он медленный. –
Майк, я пытаюсь выяснить, испытывает ли кто-нибудь еще эту проблему с производительностью, и если у них есть, то удалось ее решить? Как сказал Tin Man, это может быть связано с моей версией, так как кажется, что 1.8.7 имеет медленную библиотеку CSV. – Eric