Работа в 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 мин.
 

DiMA

php.spb.ru
Команда форума
1. читать через fread / fgets (по возможности)

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

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

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

FractalizeR

Новичок
Мануал по 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)
 

confguru

ExAdmin
Команда форума
Надо чтоб скрипт - генерил сам sql - сам sql должен вставиться быстро (если индексов не много)
 

phprus

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

Духовность™

Продвинутый новичок
хм.. а нельзя ли стандартными утилитами сделать дамп и импорт? зачем через скрипт вставлять записи? наверняка ещё и дам через phpmyadmin делается?
 
Сверху