我目前正在开始一个项目的工作,我将不得不根据数据库中的几个表编写代码(pl/sql)来导出大型XML文件.
导出文件可能会变得非常大,可能包含多达700,000个客户(包括他们的地址,订单,电话号码等).
我想知道是否有人对这方面的最佳方法有一些提示.我显然可以在其中写出丢失XMLELEMENTS的选项,但这意味着整个文件将在内存中生成.
还有一个XML模式(XSD)可供文件必须遵守.我还想知道是否有任何方法可以将表"映射"到XML模式.
任何提示都表示赞赏.
XML在这方面有一些......缺点.正如您所注意到的那样,大型XML文件可能会占用RAM和UNDO,就像没有明天一样.
我并不诚实地认为存在一种称为"最佳实践"的东西,这完全取决于您自己的数据库,服务器和查询.然而,这就是为了从大量(20?)大型表(10-400m行)向磁盘写入大量(4.5GB)XML并且非常复杂的同事(我不能声称功劳)子查询.
实际上写出所有这些XMLElements
如果您的SELECT语句完全复杂,请先创建一个表.
从表中选择,采取合理的元素,希望根据您的ID.例如,如果您具有以下结构,则将其拆分是有意义的<record>
<someXML>
<record ID="1">
<blah>
<moreBlah/>
</blah>
</record>
<record ID="2">
<blah>
<moreBlah/>
</blah>
</record>
</someXML>
Run Code Online (Sandbox Code Playgroud)从数据库中选择每个记录作为CLOB.然后,您将得到一系列将构成输出XML的CLOB.
首先写入开始标记,然后单独写入,或者以块的形式将每个CLOB写入磁盘
确保您在本地写入磁盘.如果不能避免写入网络共享,那里有一根巨大的电缆指向它.您可以随后移动文件,这比以网络(或城市/国家/地区)编写块更有效.
并行!这并不总是可行,但如果你能做到,那就这样做.
小心并行化.您不希望编写格式错误的XML.
我实际上是在倡导tbone的方法,而不是以块的方式来做.无论你做什么都避免把整件事放在记忆中.
| 归档时间: |
|
| 查看次数: |
13572 次 |
| 最近记录: |