2

您好,我目前正在使用 Oracle 11.2 XE 并尝试在使用大型 xml 文件时进行一些性能测试。到目前为止我还没有走得很远,希望你能帮助我一点。

我的目标是在数据库中有效地将大型 xml 文档从一种 xml 格式转换为另一种格式,因此我寄希望于 XMLType binary 和 XMLType Object 关系数据类型,它们应该进行性能优化,因为 Oracle 表示它们不需要 DOM 解析来进行评估大多数情况下的 XPath 表达式。

问题 1 是我无法为 OR XMLTYPE 注册复杂的模式。一个小时的注册时间后,它在大约 1.3 GB 的内存分配处出现内存不足错误而中断。架构已经分解为 3 个文件,触发 out of mem 错误的文件只有 80kb 大。我该如何处理?通过包含在更多连接的模式文件中进一步细分?

问题 2 是我无法让 XMLTransform 工作。我在用着

Insert into OUTPUT_BINARY SELECT a.filename, XMLtransform( a.xml, b.stylesheet )
FROM XMLTYPE_BINARY a, stylesheets b
  WHERE (a.filename = 'test.xml' and b.filename = 'stylesheet.xsl');

表 XMLTYPE_BINARY 和 OUTPUT_BINARY 在哪里

create table XMLTYPE_BINARY (filename varchar2(50), xml XMLTYPE) 
XMLTYPE Column xml store as BINARY XML

即使对于 100KB 的文档,它也需要永远转换(我在 30 分钟终止,不知道它是否会结束),当尝试使用 5MB 文档时,它给了我一个 ORA-24331:用户缓冲区太小。有人可以给我一个提示我在这里缺少什么吗?

4

1 回答 1

0

我认为这可能是 XE 版本的限制,但在 Oracle 11gR2 上它是一样的。我尝试了 dbms_xslprocessor 而不是 XMLTYPE 的 XMLTransform,我通过 XMLINDEX 索引了二进制 XMLTYPE 列,但处理一个 100 KB 的文件仍然需要很长时间,超过 10 分钟(从未完成过,总是过早终止)。

我已经使用 Java 应用程序在数据库外部使用 XDK 解析器和处理器转换了相同的文档,并且可以取得良好的效果。那么为什么数据库中的解析器和转换器工作得这么差呢?

于 2012-08-09T11:14:28.247 回答