Обработка PHP 4 большого XML файла и запихивание данных в базу MySQL

  • Автор темы Vladimir Vorono
  • Дата начала

si

Administrator
Это все понятно, но задача как раз стоит в том, что бы сделать возможной обработку файла такого размера на слабой машине (200 Мгц, 260 памяти), пускай медленно, но главное что бы обрабатывался. Хоть 5 дней, но без сбоев.
для примера у меня из файла xml в 30M при помощи xslt генериться некоторое кол-во html отчетов при помощи sablot. при этом процесс иногда занимает 300-400M памяти. так что про xslt можно точно забыть.

думаю такой xml можно обрабатывать expat, он не будет пытаться читать весь файл с память, и конечно лучше это делать на си, писать в файл который потом загружать LOAD DATA INFILE или mysqlimport

-~{}~ 15.02.05 01:20:

можно даже файл на сервер заливать в gzip и прямо его читать там, не распаковывая предварительно
 

nail

Guest
Уверен, что SAX parser прекрасно справится. Он масштабируем (то есть скорость обработки и требования к памяти не зависят от размера входных данных).
 

Alexandre

PHPПенсионер
как чел, который работал с 1С скажу, что я уменьшил закачивыекмый прайс с 15М до сотен К за счет разумного использования структуры данных.

Следовательно, твои 260М можно скомпоновать в 1-2М, а это уже выносимо.

Задача действительно комплексная, и не зная Конечной Цели
(которая не является: бессмысленно запихнуть 260М в БД на плохой сервер) трудно дать готовое решение.

можно предложить следующее:
На стороне 1С запускается скрипт, который:
- формирует структуру необходимых данных (можно XML)
(я бы сделал на одну логическую структуру - 1 небольшой файл)
- сжимает tar
- закачивает по ftp на сервак
- посылает HTTP запрос на запуск скрипта (php, perl, С++ (CGI) , java)

На стороне WEB:
запускается скрипт
- разтаривается инфа в спец. директорию.
запускается отдельный процесс на выполнение задач:
- анализ и парсинг данных, запись их в БД
анализ и парсинг данных лучше реализовать на C++ (для скорости)

-~{}~ 25.02.05 18:36:

да в догонку к моему вышеизложенному совету, не стоит этим заморачиваться, если это разовая конвертация.

это я сперва подумал, что такие стопудовые файлы надо ну хотя бы раз в месяц затаскивать...

потом уже дошло, что это может быть лишь разовая конвертация
 
Сверху