Импорт данных из XML

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
KKomov
Сообщения: 14
Зарегистрирован: 20 дек 2007, 17:30

Импорт данных из XML

Сообщение KKomov » 21 дек 2007, 02:32

Есть гора XML-ей, из них нужно извлечь данные и вставить в базу.

Пока план такой: задействовать парсер Билдера, обход тегов и извлечение написать вручную. Данные можно сразу вставить через IBSQL, или сгенерить sql-скрипт. Но уж больно муторно ползать по тегам вручную.

Как это делают опытные люди? Какие приёмы хорошо себя зарекомендовали?

Tonal
Сообщения: 104
Зарегистрирован: 30 сен 2007, 13:42

Сообщение Tonal » 21 дек 2007, 07:35

Я писал на Python-е
Разбирал SAX-ом.
Данные обновлял пакетно. Вроде по 1000 записей за раз. После чего сбрасывал буфера. Все запросы были с параметрами. Драйвер сам препарировал запрос при первом использовании.
На один файл одна транзакция.

Б.м. шустро работало для тех объёмов. :-)

Главная идея - использовать не DOM а SAX при работе с xml и вовремя скидывать буфера. Иначе на больших объёмах по памяти загнётся. :-)

KKomov
Сообщения: 14
Зарегистрирован: 20 дек 2007, 17:30

Сообщение KKomov » 22 дек 2007, 19:10

Tonal писал(а):Я писал на Python-е
Разбирал SAX-ом.
Данные обновлял пакетно. Вроде по 1000 записей за раз. После чего сбрасывал буфера. Все запросы были с параметрами. Драйвер сам препарировал запрос при первом использовании.
На один файл одна транзакция.

Б.м. шустро работало для тех объёмов. :-)

Главная идея - использовать не DOM а SAX при работе с xml и вовремя скидывать буфера. Иначе на больших объёмах по памяти загнётся. :-)
Спасибо за отклик и подсказку.

Про буфер я не забываю, только я ставил COMMIT в скрипте через 20, потом через 50, вставок. М.б. с порядком величины ошибся, и стоит перейти на 200-500.

Ни Питоном, ни Саксом, к сожалению, на данный момент я не владею.

А на Си++ в среде Билдер монжно написать то, что вы делали на Питоне? И этот "Сакс", его можно быстро освоить? В Билдере есть свой генератор парсера по XSD или по самому документу XML. Но вот про SAX в Билдере упоминаний нет.

(В сторону) Ах, Питон, Питон - куда ни сунешься, везде он. И бустовцы его пользуют, и при импорте из xml он полезен, оказалось. Неужели это незаменимый вариант и таки придётся его освоить?..

Хотелось бы также услышать тех, кто ограничивался Билдером/Дельфи в этой задаче.

break
Сообщения: 58
Зарегистрирован: 12 май 2005, 11:03

Сообщение break » 22 дек 2007, 23:47

Когда-то делал программу Справочник города (точнее то в чем операторы этот справочник набивали, прозванивали и т.д.)

Там ограничился только Delphi для выгрузки и загрузки в XML но через DOM - скорость выполнения не волновала т.к. это была редкая операция, был задействован майкрософтовский парсер XML. Один коммит на один файл, чтобы оставалаь возможность полностью откатиться при попытке загрузить поврежденный файл.

Если действительно потребуется использовать SAX - можно взять реализацию из библиотеки QT, предварительно заставив работать ее в билдере (хотя не знаю возможно ли это так как пользовался под Windows ею в MS Visual Studio).

Если чем то поможет - могу скинуть по электронке исходники моего XML модуля из этой программы справочника.

Tonal
Сообщения: 104
Зарегистрирован: 30 сен 2007, 13:42

Сообщение Tonal » 23 дек 2007, 08:41

В C++Builder-е, как и в Delphi для работы с XML используется оболочка вокруг MS XML.
Сам MS XML включаает SAX.
Так что использовать - можно, я это делал на C++Builder6 лет 5 назад.
Там вроде ничего особо сложного, да и в MSDN-е довольно подробно и с примерами описано.

P.S. На python-е скорость разработки увеличивается в разы. Так что если задача не очень критичная по времени/памяти, имеет смысл его использовать.

Ответить