Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 sqlloader и xml  [new]
Avotge
Guest
Мало ли, но вдруг возможно грузить xml-ки sqlloader-ом? ) (т.е. можно ли им сразу парсить xml ))
Сейчас для загрузки нарисован сакс-парсер на яве, который читает сотниметровые и гиговые xml-ки
и заливает их в базу., раскладывая по разным таблицам. Но все это не так быстро как хотелось бы.
Вижу еще такой вариант:
Прочитать xml-ку и сформировать соотв. файл(ы) с разделителями для sqlloader-а.
Насколько это будет быстрее надо пробовать и сравнивать.
Но может у кого-то уже есть опыт, наработки по теме?
16 май 16, 15:35    [19179428]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Лодырь * SQL
Guest
Это смотря как заливает.
Я бы предложил для начала переписать "заливальную" часть "сакс-парсера на яве", переведя ее на пакетную вставку.
Это технологически проще, чем переделывать работающую инфраструктуру на промежуточные файлы.
16 май 16, 15:41    [19179454]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Avotge
Guest
Лодырь * SQL
Я бы предложил для начала переписать "заливальную" часть "сакс-парсера на яве", переведя ее на пакетную вставку.

Вставка итак пакетная через batch, куда ж без нее )
Система еще посреди процесса допиливания, т.е. не очень затратно менять что-то еще есть и время и возможности.
16 май 16, 15:53    [19179509]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
ora601
Member

Откуда:
Сообщений: 750
Лодырь * SQL
Это смотря как заливает.
Я бы предложил для начала переписать "заливальную" часть "сакс-парсера на яве", переведя ее на пакетную вставку.
Это технологически проще, чем переделывать работающую инфраструктуру на промежуточные файлы.

еще есть multithreading.
16 май 16, 16:00    [19179559]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Avotge
Guest
ora601
еще есть multithreading.

Идет в неск. потоков, каждый поток грузит свой файл (если об этом речь) и естественно,
есть некий предел, когда прироста производительности как минимум, уже не наблюдается.
Интересует концептуально другое есть что-то? Имеет ли смысл пробовать сначала из xml сформировать обычные файлы, а потом их лоадером? ) Так-то все равно попробую в конечном итоге, но интересна оценка, кто имел опыт.
На таблицах нет пока ни индексов, ни триггеров, никто данные в них не меняет, не читает.
16 май 16, 16:10    [19179625]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Takurava
Member

Откуда:
Сообщений: 1776
Avotge, java OracleXML PutXML
16 май 16, 16:20    [19179667]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Вряд ли
Guest
Avotge
Идет в неск. потоков, каждый поток грузит свой файл (если об этом речь) и естественно,
есть некий предел, когда прироста производительности как минимум, уже не наблюдается.
Интересует концептуально другое есть что-то? Имеет ли смысл пробовать сначала из xml сформировать обычные файлы, а потом их лоадером?

ИМХО не имеет.
Предполагая серьезный подход к делу предположу, что предел производительности загрузки достигнут либо на вводе-выводе БД, либо на чтении xml (тоже ввод-вывод).
Добавление в середину процесса последовательности из операций записи и последующего вычитывания промежуточных файлов на независимый (в лучшем случае, в худшем - на тот же, где лежит исходный xml) носитель производительность не поднимет, скорее - наоборот.
Вариант с лодырем в direct=true прибавит немного относительно insert /*+ append*/, но не так много, чтобы перекрыть расходы на создание промежуточных файлов.
А хлопот дополнительных создаст.
16 май 16, 16:24    [19179688]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
ora601
Member

Откуда:
Сообщений: 750
Avotge
ora601
еще есть multithreading.

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


Вставка директ пас или нет ?

Написать jar для конвертации не составит труда, полно примеров.

Имхо, если нигде не налажать то должно быть одинаково.
16 май 16, 16:24    [19179692]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Avotge
Guest
ora601
Вставка директ пас или нет ?
Написать jar для конвертации не составит труда, полно примеров.
Имхо, если нигде не налажать то должно быть одинаково.

Нет вставка обычная без append (если речь об этом) ибо места итак не сильно много.
Да, написать конвертор не проблема.
Ну и поскольку в общем мнение совпадает с Вряд ли и с ora601, пока писать не буду, тоже предполагаю, что будет не сильно лучше.
16 май 16, 16:55    [19179865]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Ненучтозадела
Guest
Avotge
вставка обычная без append (если речь об этом) ибо места итак не сильно много.

Если грузите "гигазы варезов" бочками, то потери места на +append будут слабо различимы, а вот прирост производительности может быть вполне заметен. Хотя - тестить надо в конкретных условиях
16 май 16, 17:19    [19179990]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Avotge
Guest
И насчет директ:
Direct-path INSERT supports only the subquery syntax of the INSERT statement, not the VALUES clause. For more information on the subquery syntax of INSERT statements.

У меня же получается, что идет инсерт values, с которым не работает директпас (или в 11 это уже работает).
Больше того, инсерта как такового нет, - вставка идет через ХП, где уже прописан инсерт (дабы в будущем было удобнее, если что-то надо будет поменять). Интуитивно чувствую, что возможно было бы быстрее прописать не вызов ХП, а сразу инсерт, но это тоже надо пробовать. Возможно, еще лучше прописать инсерт селект, а не инесрт вэльюс, дабы попробовать включить alter session enable parallel dml в надежде, что при пакетной вставке все распараллелится и раздиректится :) (хотя с директом пока бы не баловался :()
16 май 16, 17:21    [19179994]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Avotge
У меня же получается, что идет инсерт values, с которым не работает директпас (или в 11 это уже работает).
Больше того, инсерта как такового нет, - вставка идет через ХП, где уже прописан инсерт (дабы в будущем было удобнее, если что-то надо будет поменять). Интуитивно чувствую, что возможно было бы быстрее прописать не вызов ХП, а сразу инсерт, но это тоже надо пробовать.

Ну блин... А так хорошо начинали - и мультитред, и пакетная вставка...
Директ - это когда клиент формирует и передает в БД отформатированные блоки данных.
Соответственно, жесточайшие требования по совместимости - совпадение версий и платформ клиента и сервера, не будет работать никакая серверная логика.

Вариант директа "insert select" - работает в пределах одного сервера, потому direct тут менее проблемен (требования по платформе/версии заранее выполнены), но задачу загрузки данных из внешнего источника не решает (разве что в варианте external tables)

С клиент-серверным direct не стоит связываться без крайней необходимости, в эксплуатации аукнется.
---------

insert values может выполняться как построчно, так и пакетами. Поэтому insert /*+ append */ values(:1...:n) - вполне себе решение.
Но вставка в процедуру... Могу, конечно, предположить рабочий способ (передача коллекций и FORALL insert), но это в любом случае напрасное разбазаривание ресурсов сервера.
Хотите "гибкости" на стороне сервера (что само по себе - сферический конь в вакууме) - рассмотрите лучше вариант с репозиторием запросов, откуда клиент будет дергать конкретные тексты insert.
16 май 16, 17:35    [19180057]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Avotge
Guest
andrey_anonymous
insert values может выполняться как построчно, так и пакетами. Поэтому insert /*+ append */ values(:1...:n) - вполне себе решение.
Но вставка в процедуру... Могу, конечно, предположить рабочий способ (передача коллекций и FORALL insert), но это в любом случае напрасное разбазаривание ресурсов сервера.
Хотите "гибкости" на стороне сервера (что само по себе - сферический конь в вакууме) - рассмотрите лучше вариант с репозиторием запросов, откуда клиент будет дергать конкретные тексты insert.

Ок. Попробую сравню с insert /*+ append */ values(:1...:n).
Но с вызовом ХП пакетный вызов тоже ж работает, только что может переключение контекста идет на сам вызов.
Формировать и передавать коллекцию + форол немного геморройно получается.
Насчет же гибоскти - например вполне возможно, придется перенаправлять часть данных в др. таблицы или что-то вообще перестать грузить и т.д. - в ХП поправить мне гораздо удобнее.
16 май 16, 17:43    [19180079]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Avotge
Но с вызовом ХП пакетный вызов тоже ж работает

Трассировку снимите.
Может, конечно, что-то изменилось в консерватории со времен былинных, но под "пакетным" pl/sql в таком подходе в трассе раньше можно было наблюдать адское количество рекурсивных однострочных insert values.
16 май 16, 17:52    [19180130]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Avotge
Насчет же гибоскти - например вполне возможно, придется перенаправлять часть данных в др. таблицы или что-то вообще перестать грузить и т.д. - в ХП поправить мне гораздо удобнее.

Еще раз - рассмотрите вариант репозитория запросов.
Приложение при старте зачитывает тексты insert из репозитория (просто из таблички).
Соответственно, "гибкость" достигается update репо-таблички.
16 май 16, 17:57    [19180153]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
ora601
Member

Откуда:
Сообщений: 750
Avotge
И насчет директ:
Direct-path INSERT supports only the subquery syntax of the INSERT statement, not the VALUES clause. For more information on the subquery syntax of INSERT statements.

У меня же получается, что идет инсерт values, с которым не работает директпас (или в 11 это уже работает).


в 11g R2 работает.
16 май 16, 18:07    [19180193]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
andrey_anonymous
Директ - это когда клиент формирует и передает в БД отформатированные блоки данных.
Соответственно, жесточайшие требования по совместимости - совпадение версий и платформ клиента и сервера, не будет работать никакая серверная логика.
...
С клиент-серверным direct не стоит связываться без крайней необходимости, в эксплуатации аукнется.
Ну это, пожалуй, ты переборщил
Direct Path Loading Overview
Restrictions on Using Direct Path Loads
17 май 16, 02:40    [19181494]     Ответить | Цитировать Сообщить модератору
 Re: sqlloader и xml  [new]
Avotge
Guest
В общем переписал на обычные пакетные инсерты вместо "пакетных" вызовов хп.
Работает быстрее в 7 раз (при этом заметной разницы с append или без не увидел).
17 май 16, 09:41    [19181928]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить