|
|
|
XML -> SAX -> MDB - нужна оптимизация
|
|||
|---|---|---|---|
|
#18+
Получаю с 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 Мб буфером - и при этом такие показатели ... что тогда говорить про более слабую машину? Заранее спасибо за любое содействие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 04:04:18 |
|
||
|
XML -> SAX -> MDB - нужна оптимизация
|
|||
|---|---|---|---|
|
#18+
Java-то тут при чем, если все в Access упирается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:06:25 |
|
||
|
XML -> SAX -> MDB - нужна оптимизация
|
|||
|---|---|---|---|
|
#18+
Java выполняет роль администратора и парсера. Это, во-первых, не прога на один комп - она ставится на большее количество машин. А во-вторых, там настолько сложный анализ и логгинг, что пользоваться чистыми средствами Access - себе дороже. Поэтому все делает Java, а через мост JDBC-ODBC я кладу данные в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:15:35 |
|
||
|
XML -> SAX -> MDB - нужна оптимизация
|
|||
|---|---|---|---|
|
#18+
Понимаю что все программа написано на Java. Но гуру MSAccess смогли бы помочь в вопросе гораздо больше. Кстати JDBC-ODBC славится своей тормознутостью. Не пробовали подыскать альтернативных драйверов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:57:39 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2145942]: |
0ms |
get settings: |
17ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
49ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 309ms |
| total: | 479ms |

| 0 / 0 |
