【问题标题】:Handling large xml documents处理大型 xml 文档
【发布时间】:2016-12-05 11:19:38
【问题描述】:

我了解存储为安全文件二进制 xml 的 xmltype 可以处理最大 4 GB 的文件。

我想知道是否有人知道任何处理大于 4 GB xml 文件的好方法,包括存储在数据库中和从中读取\选择数据。

【问题讨论】:

  • 我对 xml 不是很熟悉,但我考虑过循环,获取 clobsize 中的节点块,并将其存储在所述块中。但鉴于这些文件可能会变得很大,这将需要很长时间。

标签: xml oracle binary large-files xmltype


【解决方案1】:

您不应该在 Oracle 数据库中存储像 XMLType 这样大的 XML 文件。

Oracle 中的大多数 XML 函数都基于Document Object Model (DOM),这需要将整个 XML 文档加载到内存中,包括大量的开销数据。即使在大型机器上,这也经常导致内存泄漏或类似问题。

为了将这样的 XML 放入数据库,您应该考虑使用基于外部流的方法。基于事件的 XML 解析器,通常称为 SAX (Simple API for XML)。几乎所有编程语言都有 SAX 解析器。然后将 XML 的内容存储为通常的关系数据。从 Oracle 数据库创建如此大的 XML 将“逐行”完成到 CLOB。

另见PL/SQL APIs for XMLType

这种类型的程序处理可通过 Oracle XDK Java 和 C 组件中的 SAX 接口获得。

通常,当您使用 SAX 解析器时,您必须编写更多代码,因为它不提供任何修改或查询元素。与此同时,有可用的基于流的解析器(例如 Perl XML::Twig),它们与基于 DOM 的解析器一样强大。

【讨论】:

  • 您是否有任何引用表明解析 XML 会导致 Oracle 数据库中的内存泄漏?
  • 我找到了这个:PL/SQL APIs for XMLType:在 Oracle Database 11g 第 1 版 (11.1) 之前,Oracle XML DB 处理的每个文本节点或属性值的大小限制为 64 K 字节.从 11.1 版开始,此限制不再适用。 很久以前,当我开发我的应用程序时,我假设当时已应用此限制。可以肯定的是,基于标准 DOM 的解析器不起作用。
  • 还有这个:XML Parsing for Java 当程序解析大型 XML 文档并在内存中创建 DOM 树时,它会影响性能。 对于旧版本:@987654327 @: 你不应该使用 DOMParser 来解析一个 50Mb 的 XML 文件。您需要查看解析任意大小文件的 SAXParser,因为它不会在内存中创建节点树。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2014-05-23
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多