从oracle生成大型xml文件:最佳实践

Eri*_*ikL 8 oracle plsql

我目前正在开始一个项目的工作,我将不得不根据数据库中的几个表编写代码(pl/sql)来导出大型XML文件.

导出文件可能会变得非常大,可能包含多达700,000个客户(包括他们的地址,订单,电话号码等).

我想知道是否有人对这方面的最佳方法有一些提示.我显然可以在其中写出丢失XMLELEMENTS的选项,但这意味着整个文件将在内存中生成.

还有一个XML模式(XSD)可供文件必须遵守.我还想知道是否有任何方法可以将表"映射"到XML模式.

任何提示都表示赞赏.

Ben*_*Ben 6

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的方法,而不是以块的方式来做.无论你做什么都避免把整件事放在记忆中.