Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Парсинг большого XML


Автор: Error202 16.2.2012, 13:43
Есть 4 файла XML по 2Гб каждый...
На сервере 1Гб памяти...
Чем и как можно обработать файл такого размера?

Автор: infarch 16.2.2012, 14:35
Читать и парсить на лету, не сохраняя в памяти весь документ. Или перестать быть извращенцем и пользоваться базами данных.

Автор: Error202 16.2.2012, 14:44
Да яб легко... с филиального сервера такие идут и сделать ничего нельзя...

Автор: bvn13 16.2.2012, 15:19
Цитата(Error202 @ 16.2.2012,  14:44)
Да яб легко... с филиального сервера такие идут и сделать ничего нельзя...

ну... я бы тогда порекомендовал 1с...

Автор: arto 16.2.2012, 15:49
а как обработать?

хинт: rm -f * тоже обработка

Автор: Error202 16.2.2012, 16:26
Пропарсить...

Вроде как наладил через XML::Twig, но проблема... где-то косяк синтаксиса... :(
Половина проходит и стопор... 

Можно как-то пропускать ошибки при парсинге?

Автор: Turos 22.2.2012, 18:32
Считывать по кусочкам без хранения в памяти, составляя хеш "позиция узла" =>  "позиция байта в файле", и потом подчитывать данные по позиции

---------------------
https://www.allmetals.ru/metals/germanium/

Автор: Pilat66 23.2.2012, 03:16
есть же два подхода к разбору XML - прочитать как огромную сруктуру в память, и читать постепенно, получая обратные вызовы на каждый элемент. Второй способ хоть терабайтные файлы пропарсит.

Автор: yazu 23.2.2012, 05:45
Зависит для чего парсить? Любая нетривиальная обработка 2ГБ файла (не важно XML, нет) на 1Гб машине может легко привести к практически нерешаемой задаче - поиск дубликатов, к примеру.

А тривиальная - выборка чего-либо и суммирование, к примеру, вполне может быть выполнена регулярными выражениями.

Очень хорошее введение об обработке нтмл (принципы одинаковы) есть в свободной книжке Perl & LWP.

ЗЫ Книга была в свободном доступе с гаденьким замечанием, что мол, все равно на вшивых русских хакерских серверах висит, поэтому мол читайте у меня - конкретно сейчас сервер недоступен, так что надо искать на этих самых серверах smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)