Работа в PHP с большими файлами

Герман

Новичок
Работа в PHP с большими файлами

Имеется бинарный файл размером 37Mb его читаем с помощью функции file_get_contents($this->fn);
В цикле
$dp=0;
$zap='INSERT INTO Results ( Ddata ) Values';
while ($dp<strlen($this->file))
{
$len=substr($this->file,$dp,4);
$len=unpack('s',$len);
$dp+=4;
$zap.='('.$len.'),';
}
mysql_query($zap);

Обработка такого файла занимает в среднем 1,5 часа.
Что можно сделать для ускорения обработки, требуемое время не более 10 мин.
 
1. читать через fread / fgets (по возможности)

2. копить по 50-5000 sql заросов и сливать их разом
insert ... (...) values (...), (...)

30 метров проходится циклом секунд за 10
еще на базу минута

3. дамп скормить проге mysql, удалить индексы перед заливкой
 
Мануал по MySQL советует вставлять много рядов примерно так:

[SQL]LOCK TABLES a WRITE;
INSERT INTO a VALUES (1,23),(2,34),(4,33);
INSERT INTO a VALUES (8,26),(6,29);
...
UNLOCK TABLES;[/SQL]

LOCK TABLES гарантирует, что данные будут сливаться на диск после выполнения UNLOCK TABLES либо после заполнения внутренних буферов.

-~{}~ 25.12.08 11:30:

Кстати, этот файл нельзя получать в виде, пригодном для LOAD DATA INFILE? Так еще быстрее будет.
 
На обработку файла и формирование запроса уходит 30 мин даже если в файл сохранять для LOAD DATA INFILE все равно не укладываюсь
Тело цикла обработки данных более сложное файл содержит данные с прибора TERADYNE (.stdf)
 
Надо чтоб скрипт - генерил сам sql - сам sql должен вставиться быстро (если индексов не много)
 
Герман
На обработку файла и формирование запроса уходит 30 мин даже если в файл сохранять для LOAD DATA INFILE все равно не укладываюсь
Те 30 минут занимает только генерация либо sql-запросов либо данных в формате для LOAD DATA INFILE без учета времени их вставки в БД? Если да, то либо надо пытаться оптимизировать алгоритм, либо переходить на компилируемые языки программирования. На такой обработке данных реализация на том-же С должна дать значительный выигрыш.
 
хм.. а нельзя ли стандартными утилитами сделать дамп и импорт? зачем через скрипт вставлять записи? наверняка ещё и дам через phpmyadmin делается?
 
Сверху