Работа с большим объёмом данных.

Fuz

Новичок
Работа с большим объёмом данных.

Допустим есть текстовый файл на серваке размером 40-50МБ.
Его нужно пропарсить и сложить данные в БД.
Насколько хорошо будет работать такой скрипт и будет ли вообще?
Вопрос стоит в том, чтобы при закачке на сервер файл разбивался на части и парсились отдельные куски,
либо парсить целиком весь файл(что избавляет от геммороя разбивки файла на куски). Но меня
смущает размер файла - потянет ли скрипт такой объём за раз?
 

svetasmirnova

маленький монстрик
Мой любимый вариант:
пропарсь дома, где сможешь выставить такие настройки (time_limit, memory), которые позволят пропарсить сколь угодно большой файл. И результат сделай в виде sql-файла, который без проблем зальёшь в базу.
 

hermit

Новичок
В принципе я парсил объемы и больше. PHP конечно по скорости обработки далеко уступает C, но всеравно можно если конечно он у тебя будет не каждые 2 секунды запускаться

Поставь в начале скрипта set_time_limit(0); и будешь уверен что скрипт не вылетит по таймауту пока все не доделает
 

Fuz

Новичок
проблема в том, что это должен делать человек слабо понимающий что он делает. он должен тыкнуть на файл, файл должен залиться либо целиком, либо по частям (НО без его ведома) , пропарситься, добавиться в базу и известить об этом пользователя. Какие объёмы данных могут парситься на серваке без особых проблем?
 

hermit

Новичок
svetasmirnova
memory в принципе можно и не трогать, если конечно не пытаться при парсинге загрузить файл полностью в память =)
А вообще подход хорош, чем нагружить мускл кучей запросов лучше составить sql-файл а потом одним махом его залить
 

Fuz

Новичок
hermit
это уже интересней. какие объёмы ты без проблем обрабатывал?
Какие настройки должны быть у memory в таком случае?

-~{}~ 01.06.06 13:38:

hermit, а если при парсинге не загружать файл целиком в память, то как поступить?...я планировал обычный file(), но видимо жёстко заблуждался.
 

hermit

Новичок
Fuz
Это зависит от того что и как ты будешь выкусывать из файла и будешь ли потом это еще как то обрабатывать. Поэтому лучше сделать какую то страницу loading... чтобы пользователь не тыкал несколько раз подряд.
Больше времени думаю будет уходить не на парсинг, а на заливку данных... Зависит от структуры таблиц, индексов и пр.

-~{}~ 01.06.06 13:41:

Fuz
file берет весь файл и кидает его в массив, читай построчно при помощи
fopen, fread
экономия памяти, а результат такой же
В мануалах есть примеры как правильно ими пользоваться

А я парсил файлы метров по 200-300, но у меня еще была дикая обработка данных, занимало секунд 14 на двухпроцовом серваке
 

Fuz

Новичок
hermit
file() целиком заливает файл в массив. Если размер файла больше memory_limit будет ошибка.так? Что делать, чтобы этого избежать?читать из файла по кускам?каким образом?использовать fread?

-~{}~ 01.06.06 13:45:

hermit ок. с парсингом разобрались. теперь сопутствующий вопрос - как ты заливал такие объёмы на сервак?
 

hermit

Новичок
Fuz
Обычно руками через фтп, через форму даже не пробовал -- стремно как то. Но хотя попробуй, может и получится
 

Fuz

Новичок
hermit
вот и я о том же. в идеале - человек должен это делать через форму.=((
 

hermit

Новичок
Fuz
Попробуй, если канал нормальный то 50 метров дето за пол минуты зальются (берем мегабитный канал)
 
Сверху