метод для создания большого XML-файла размером около 3 ГБ - PullRequest
0 голосов
/ 22 февраля 2019

Мои данные находятся в Oracle 11g Enterprise Edition, выпуск 11.2.0.4.0 - 64-битная версия.

Я искал в Интернете и пробовал предложения, чтобы попытаться сгенерировать xml-файл размером около 3 ГБ.

Итак, я использовал SSRS, пакет oracle xmldom в PLSQL, SQL (xmlelement, xmlagg ... и т. Д.), Ручной SQL и построчно вставлял в таблицу (select '<starttag>'|| table.value ||'</endtag>' from table).

Что еще я попробую дальше?

(кстати, я почти иду на путь Java StaX, но так как я не разработчик программы, мне не предоставлен ресурс. Итак, я застрял с оракулом, SQL, язык PLSQL является языкомя буду использовать.)

мой пример кода:

https://community.oracle.com/thread/4197304

https://community.oracle.com/thread/4199003

Я нашел здесь статью о наилучшей практике для генерациибольшой XML-файл.Теперь я могу сгенерировать xml-файл вручную, но мне потребовалось почти 2 полных дня, чтобы сгенерировать xml-файл размером около 80 МБ.Мой нынешний подход займет у меня целую вечность для создания фактического XML-файла объемом 3 ГБ.

Как все это делают?Сколько времени является нормой для подхода, который вы все используете для создания большого XML-файла?

1 Ответ

0 голосов
/ 22 февраля 2019

Я использую самый простой способ формирования основной части xml.Это sqlplus и спул в файл.Время выполнения скрипта составляет 6 минут.

[oracle@krw-sql-ora12-01 test_xml]$ ls -l
total 164252
-rwxr-xr-x. 1 oracle oinstall       405 Feb 22 10:43 test_unload_xml.sh
-rw-r--r--. 1 oracle oinstall 168189616 Feb 22 10:49 test_xml.xml

[oracle@krw-sql-ora12-01 test_xml]$ more test_unload_xml.sh
 #!/bin/sh

    sqlplus -s /  as sysdba <<EOF
    set heading off
    set termout OFF
    SET FEEDBACK OFF
    SET TAB OFF
    set pause off
    set verify off
    SET UNDERLINE OFF
    set trimspool on
    set timing off
    set echo off
    set linesize 1000
    set pagesize 0
    spool test_xml.xml
    select '<starttag>'|| ID_SKL||'</endtag>'  from xxx.yyyy;
    spool off
    exit;
    EOF

Для примера.

<starttag>752</endtag>
<starttag>753</endtag>
<starttag>755</endtag>
<starttag>756</endtag>
<starttag>758</endtag>
<starttag>759</endtag>
<starttag>767</endtag>
<starttag>772</endtag>
<starttag>778</endtag>
<starttag>784</endtag>
<starttag>789</endtag>
<starttag>798</endtag>
<starttag>800</endtag>
<starttag>804</endtag>
<starttag>805</endtag>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...