PHP чтение больших текстовых файлов - PullRequest
2 голосов
/ 16 августа 2010

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

В настоящее время я вставляю это как:

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 16 августа 2010

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

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

2 голосов
/ 16 августа 2010

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

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

1 голос
/ 16 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...