生成大约 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 的方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 XMLreader 读取和解析大型 XML 文件。空值问题