Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / XML -> SAX -> MDB - нужна оптимизация / 4 сообщений из 4, страница 1 из 1
24.04.2007, 04:04:18
    #34482103
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML -> SAX -> MDB - нужна оптимизация
Получаю с FTP упакованный zip'ом xml-файл, иногда достигающий внушительных размеров - при распаковке до 600 Мб.
Для парсинга использую SAX-технологию (javax.xml.parsers.SAXParser), так как DOM через какое-то время умрет от недостатка памяти. Парсинг бежит бодро, значения в пределах одного узла (верхний уровень, но не Document) помещаю в объект с определенными полями.
При окончании обработки одного узла начинаю записывать объект(ы) в БД. К сожалению, определен MS Access. Запись производится в 3 таблицы: 1 - 99% апдейт/1% инсерт; 2 - 90% апдейт/10% инсерт; 3 - 100% инсерт. 2 подчинена 1, 3 подчинена 2.
Еще до парсинга определены connection и statement.
Запись производится "линейно" - типа statement.executeUpdate("UPDATE ... или INSERT ..."), затем через SELECT по уникальному полю нахожу добавленный/обновленный рекорд, его id, который и передаю подчиненной таблице для дальнейшего обновления/добавления.

Если запускать программу на пустой базе, то 600 Мб обрабатывается шустро - за 20-30 минут вместе со скачиваением. Однако если база рабочая - 200-500 Мб, то процесс затягивается и может продолжаться до 12-13 часов. Проблема исключительно в записи в БД, так как по времени парсинг занимает менее 1/10000 от записи в БД, то есть им можно пренебречь.

Больше интуитивно я чувствую, что процесс можно сильно оптимизировать, но как - пока не представляю (ну, первое, что пришло в голову - пакетно формировать SQL-запрос, включающий Н-ное количество дискретных запросов и передавать базе, чтобы реже вызывать statement). Но это сырое решение и может выполняться только для таблицы 3, и то с ограничениями.

Возможно, кто-то сталкивался с похожими задачами и может просто направить по правильному пути.
Тем более обидно, что компьютер не из слабых - C2Duo 2.4 (E6600), 2 Гб оверклокеровской памяти (4-4-4-12), винт с 16 Мб буфером - и при этом такие показатели ... что тогда говорить про более слабую машину?

Заранее спасибо за любое содействие.
...
Рейтинг: 0 / 0
24.04.2007, 12:06:25
    #34482940
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML -> SAX -> MDB - нужна оптимизация
Java-то тут при чем, если все в Access упирается?
...
Рейтинг: 0 / 0
24.04.2007, 12:15:35
    #34482976
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML -> SAX -> MDB - нужна оптимизация
Java выполняет роль администратора и парсера.
Это, во-первых, не прога на один комп - она ставится на большее количество машин. А во-вторых, там настолько сложный анализ и логгинг, что пользоваться чистыми средствами Access - себе дороже.
Поэтому все делает Java, а через мост JDBC-ODBC я кладу данные в БД.
...
Рейтинг: 0 / 0
24.04.2007, 12:57:39
    #34483179
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML -> SAX -> MDB - нужна оптимизация
Понимаю что все программа написано на Java. Но гуру MSAccess смогли бы помочь в вопросе гораздо больше. Кстати JDBC-ODBC славится своей тормознутостью. Не пробовали подыскать альтернативных драйверов?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / XML -> SAX -> MDB - нужна оптимизация / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]