Ответ
Misha v.3 20.01.2005 15:39
create xml - недешевая операция в плане расхода памяти.
беганье по нодам - небыстрая операция (хотя приводимые вами цифры что-то ну очень большие).
для mp3.samsung.ru мне пришлось делать импорт 30МБ xml файла в БД (более 400 тысяч записей). правда я не пытался сразу класть даные в БД, в мою задачу входило создать текстовый файл который потом будет быстро загружен с помощью load data infile...
испробованные мной варианты:
- create xml + foreach - ~10 минут и > 400МБ памяти для работы: не подошло (хотя код примитивный)
- create xml + transform - ~ 4 минуты, ~ 200 МБ
- parser match - очень долго, расход памяти очень большой
- perl match - ~ 1 минута, расход памяти очень небольшой. на этом и остановился, в результате получилось:
1. file::load с удаленного сервера этого xml (zip в архиве)
2. запуск перл скрипта, который распаковывает xml, проходится по нему матчем, получает на выходе 3 текстовых файла и запускает sql скрипт, в котором дропаются существующие таблички, создаются новые, потом 3 load infile и затем создаются индексы.
когда речь заходит о ковырянии в огромнымх файлах, то тут в большинстве случаев даже не стОит пытаться это делать парсером, не для этого он :)