bbs

Здравствуйте Гость ( Вход | Регистрация )

 
ОтветитьСоздать новую темуСоздать новое голосование

Каскадный · [ Стандартный ] · Линейный

> Обработка большого XML-файла, Вопрос не для сочувствующих

 Solo
post 8.08.2007 - 20:01
Отправлено #1


Group Icon
Сообщений: 41
Рег.: 19.04.05
ID No.: 2 270
Если кто-то сталкивался с похожим - подскажите.

Итак, программой круглосуточно сканируется определенная папка на наличие xml-файлов. При появлении оных по ним пробегает процедура выбирающая необходимые атрибуты, затем файл удаляется.
Обработка маленьких xml'ников 3000 файлов (40 000 элементов) обрабатывается менее минуты. Но при обработке одного файла с таким же количеством элементов (5 - 10 Мб) система умирает (буквально, через 1,5 часа обработки ноут отрубился от перегрева smile.gif )

Как можно оптимизировать обработку здорового файла?
Если разбивать, то как не нарушить структуру?
Иль алгоритм какой-то есть?

Сообщение отредактировал Solo - 8.08.2007 - 20:01
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 dimmik
post 8.08.2007 - 21:09
Отправлено #2


Group Icon
Сообщений: 991
Рег.: 11.12.04
ID No.: 676
На чем написана программа?

Насколько я понимаю, проблема в том что программа-анализатор пытается весь xml-файл загнать к себе в память (создает DOM-объект), на чем и падает. Ибо xml-нода в памяти это существенно больше чем она же в xml-файле.
Решение - использовать SAX-парсер, http://ru.wikipedia.org/wiki/Sax.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Solo
post 8.08.2007 - 22:09
Отправлено #3


Group Icon
Сообщений: 41
Рег.: 19.04.05
ID No.: 2 270
ActionScript 3. так как встроенная мощная поддержка xml, хотел избежать использование сторонних парсеров.
Тестирование показало, что файл загружается и представляется как хмл довольно быстро. Падает при переборе
элементов. Фигня какая-то.
dimmik, спасибо, опробую твое предложение.

Сообщение отредактировал Solo - 8.08.2007 - 22:10
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Ghjyby
post 9.08.2007 - 10:39
Отправлено #4


Group Icon
Сообщений: 160
Рег.: 20.06.07
ID No.: 18 363
Цитата (Solo @ 8.08.2007 - 22:09)
ActionScript 3. так как встроенная мощная поддержка xml, хотел избежать использование сторонних парсеров.
Тестирование показало, что файл загружается и представляется как хмл довольно быстро. Падает при переборе
элементов. Фигня какая-то.
dimmik, спасибо, опробую твое предложение.
*


Сорри что влезаю...

Падает на чем? В смысле - медленно перебирает (если попробовать просто перебирать безо всякой обработки [скажем, тупо пройтись по нодам] - тоже падает?) или память кончается?

Сообщение отредактировал Ghjyby - 9.08.2007 - 10:40
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Solo
post 9.08.2007 - 15:21
Отправлено #5


Group Icon
Сообщений: 41
Рег.: 19.04.05
ID No.: 2 270
Проблема решена. Файл теперь обрабатывается очень быстро smile.gif
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Fox
post 9.08.2007 - 16:40
Отправлено #6

Модератор
Group Icon
Сообщений: 4 599
Рег.: 1.12.04
ID No.: 296
И в чём же была проблема? ;-)
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Solo
post 9.08.2007 - 19:39
Отправлено #7


Group Icon
Сообщений: 41
Рег.: 19.04.05
ID No.: 2 270
Алгоритм действий:
1. Загружаю файл как текст
2. Расчленяю его на элементы (ноды)
3. Конвертирую каждый полученный элемент в хмл и пропускаю через процедуру выборки нужных атрибутов.

Сообщение отредактировал Solo - 9.08.2007 - 19:40
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Fox
post 10.08.2007 - 00:59
Отправлено #8

Модератор
Group Icon
Сообщений: 4 599
Рег.: 1.12.04
ID No.: 296
То есть по сути написан свой парсер?
Мдя. Имхо, стоит очень серьёзно подумать на тему, что будет, если попадётся на входе битый файл. Не начудит ли Ваш парсер при этом?
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение
 Solo
post 10.08.2007 - 14:15
Отправлено #9


Group Icon
Сообщений: 41
Рег.: 19.04.05
ID No.: 2 270
Угу, сразу вырисовывается как минимум три плачевных сценария.
Естественно придется реализовать обработку ошибок.
Но в принципе, в моем случае, риск появления битых файлов очень низок.
Пользователь offlineПрофайлОтправить личное сообщение
Вернуться к началу страницы
+Цитировать сообщение

ОтветитьОпции темыСоздать новую тему
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

 rss   Упрощённая версия Сейчас: 20.09.2019 - 03:00