2016-12-05 11 views
0

Я понимаю, что xmltype, хранящийся как файл securefile, может обрабатывать файлы размером до 4 ГБ.Обработка больших документов xml

Мне было интересно, если кто-нибудь знает какие-либо хорошие способы обработки файлов размером более 4 ГБ, как для хранения в базе данных, так и для чтения/выбора данных из него.

+0

Я не очень хорошо знаком с xml, но я рассмотрел цикл, извлечение кусков узлов в clobsize и хранение его в указанных кусках. Но, видя, что эти файлы могут стать потенциально БОЛЬШОЙ, это займет много времени. – Moptan

ответ

0

Вы не должны хранить такие большие XML-файлы как XMLType в базе данных Oracle.

Большинство XML-функций в Oracle основаны на Document Object Model (DOM), что требует, чтобы весь документ XML был загружен в память, включая огромное количество служебных данных. Даже на больших машинах это часто вызывает утечку памяти или подобные проблемы.

Чтобы разместить такой XML в базе данных, вы должны рассмотреть внешний поток, основанный на событиях XML-парсер, часто называемый SAX (Simple API for XML). У вас есть анализаторы SAX, доступные практически на всех языках программирования. Содержимое XML затем сохраняется как обычные реляционные данные. Создание такого большого XML из базы данных Oracle будет выполняться «по очереди» в CLOB.

Смотрите также PL/SQL APIs for XMLType

Этот тип обработки процедурного доступен через интерфейс SAX в Java и C компонентов Oracle XDK.

Обычно вам необходимо написать больше кода при использовании анализатора SAX, поскольку он не содержит никаких элементов модификации или запроса. В то же время доступны анализаторы, основанные на потоке (например, Perl XML::Twig), которые так же мощны, как парсер, основанный на DOM.

+0

Есть ли у вас какие-либо цитаты, которые анализируют XML, вызывает утечку памяти в базах данных Oracle? – MT0

+0

Я нашел это: [PL/SQL API для XMLType] (https://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb10pls.htm#ADXDB1100): * До Oracle Database 11g Release 1 (11.1), каждый текстовый узел или значение атрибута, обработанное Oracle XML DB, было ограничено размером до 64 Кбайт. Начиная с версии 11.1, это ограничение больше не применяется. * Очень давно, когда я разработал свое приложение, я предполагаю, что этот предел применяется в то время. Конечно, стандартные парсеры, основанные на DOM, не работали. –

+0

И этот: [XML-анализ для Java] (https://docs.oracle.com/cd/B28359_01/appdev.111/b28394/adx_j_parser.htm#ADXDK19112) * Когда программа анализирует большой XML-документ и создает DOM в памяти, это может повлиять на производительность. * И для более старой версии: [Часто задаваемые вопросы (часто задаваемые вопросы): XML-парсер для PL/SQL] (https://docs.oracle.com/cd/A91773_01/ids902dl/web. 902/a88894/adx28ppl.htm # 1004621): * Вы не должны использовать DOMParser для разбора XML-файла 50 Мб. Вам нужно взглянуть на SAXParser, который разбирает файлы произвольного размера, потому что он не создает дерево в памяти узлов по мере его появления. * –