2010-08-16 2 views
2

Я читаю мухи, по существу, свыше 500 000 линий, выделенных | для столбцов, которые я обрабатываю и пытаюсь вставить в базу данных через CLI. Есть ли лучший способ прочитать ее, чтобы я мог ее использовать?PHP Чтение больших текстовых файлов

В настоящее время я вставив его, как:

$fd = fopen ($txtFileName, "r"); 
while (!feof ($fd)) {  
    $buffer = fgets($fd);  
    $lines[] = $buffer; 
} 
fclose ($fd); 

$i=0; 
#hearder keys $t = $lines[1]; 

$keys = explode('|',$t); 

Однако я начинаю бежать из памяти с большими файлами .. Любая помощь будет оценена. Спасибо

ответ

4

Вам действительно нужно иметь все данные в памяти, прежде чем вы начнете его обрабатывать? Как правило, лучше всего читать строку, выполнять некоторую обработку (например, вычислять статистику агрегатов или делать обновления БД), а затем отбрасывать ее и переходить к следующей строке.

Если вам действительно нужно сделать это со всем в памяти, я бы с уважением предположил, что PHP не может быть подходящим инструментом для работы, если у вас недостаточно памяти в вашей системе.

+0

Спасибо, да .. Я должен был сделать это с самого начала, а не читать все это. Приветствия! – Petrogad

1

Несомненно.
Вставьте его в базу данных немедленно, не храните в массиве

2

Почему бы не прочитать его по строкам? Сначала прочитайте заголовки, затем прочитайте строку, вставьте значения, прочитайте строку, вставьте значения и т. Д. Тогда ваши требования к памяти будут крошечными.

В зависимости от того, как вы обращаетесь к базе данных, вы можете, конечно, захотеть пакетно вставить, но партия из 100 или даже 1000 будет по-прежнему иметь относительно небольшую стоимость памяти по сравнению с загрузкой всего файла в одном идти.