生成大约 3GB 文件大小的大型 xml 的方法

Posted

技术标签:

【中文标题】生成大约 3GB 文件大小的大型 xml 的方法【英文标题】:method to generate large xml for about 3GB in file size 【发布时间】:2019-02-22 01:04:21 【问题描述】:

我的数据在 Oracle 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 中。

我一直在网上搜索并尝试建议,尝试生成文件大小约为 3GB 的 xml 文件。

所以,我在 PLSQL 中使用了 s-s-rS、oracle xmldom 包、SQL(xmlelement、xmlagg...等)、手动 SQL 并逐行插入表中(select '<starttag>'|| table.value ||'</endtag>' from table)。

接下来我还要尝试什么?

(顺便说一句,我几乎要采用 Java StaX 方式,但由于我不是程序开发人员,因此我没有获得资源。所以,我被 oracle、SQL 卡住了,PLSQL 是我将使用的语言.)

我的示例代码:

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

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

我在这里找到了一篇关于生成大型 xml 文件的最佳实践的文章。我现在可以使用手动方式生成 xml 文件,但我花了将近 2 天的时间来生成文件大小约为 80MB 的 xml 文件。我目前的方法需要很长时间才能生成实际的 3GB xml 文件。

每个人都是怎么做的?大家用来生成大型xml文件的方法的标准时间是多少?

【问题讨论】:

【参考方案1】:

我使用最简单的方法来形成xml的主要部分。这是 sqlplus 和 spool to file。脚本的运行时间为 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>

【讨论】:

感谢您的意见。我看到您是从没有条件的单表中选择的。我认为我的查询太复杂了,我需要微调那部分。如果我有解决方案会分享。

以上是关于生成大约 3GB 文件大小的大型 xml 的方法的主要内容,如果未能解决你的问题,请参考以下文章

用cobol主机生成xml

使用 XMLreader 读取和解析大型 XML 文件。空值问题

读取大型二进制文件每 30 个字节的最快方法?

在 C# 中解析大型 XML(大小为 1GB)的最佳方法是啥?

将大型 csv 文件从 S3 读入 R

解析大型 XML 文件?