Java Oracle xpath的性能:两种选择方案

Java Oracle xpath的性能:两种选择方案,java,performance,oracle,xpath,xstream,Java,Performance,Oracle,Xpath,Xstream,我使用的是Oracle11g,有一个XMLType表。此表中有许多记录,每个XML包含0到n个答案的列表,如下所示: <section> <answer id="100"> <value>Something</value> </answer> ... </section> 返回 <answer id="100"> <value>Something</value>

我使用的是Oracle11g,有一个XMLType表。此表中有许多记录,每个XML包含0到n个答案的列表,如下所示:

<section>
  <answer id="100">
    <value>Something</value>
  </answer>
  ...
</section>
返回

<answer id="100">
  <value>Something</value>
</answer>
Something
返回

<answer id="100">
  <value>Something</value>
</answer>
Something
为一个复杂的查询提取许多text()值的性能受到了影响,这让我提出了以下问题。如果我使用像xstream这样的库在java中解析这些值,我会获得更好的性能吗(示例1),还是让oracle为我解析这些值更好(示例2)

在我花时间重写许多DAO和查询之前,我正在尝试从其他人的经验或一些白皮书中学习,所以非常感谢您所做的一切,谢谢

=========================编辑


开始研究使用Scala作为JVM中解析xml的替代方法。您可以随意添加Scala示例。

我认为示例2应该更快。
如果您需要更高的速度,我建议对此表进行规范化,并摆脱XML或使用物化视图。

我终于开始进行测试,下面是我的发现

对于使用表的简单“报告”jsp视图,我运行了一个查询来填充850行

根据我的代码库,我首先运行查询,如下所示:

<section>
  <answer id="100">
    <value>Something</value>
  </answer>
  ...
</section>
  • 对于每条记录,查询在XMLTypes上包含3个左连接
  • 每个记录提取了15个“示例2”值
  • 每个值都不需要XStream处理
总共花费了:

8.27秒单独运行查询

15秒从开始到完成视图的总时间

然后,我将查询更改为执行以下操作:

  • 对于每条记录,查询在XMLTypes上包含3个左连接
  • 每个记录提取了15个“示例1”值
  • 每个值还运行XStream处理以提取值
总共花费了:

24.84秒单独运行查询

60秒从开始到完成视图的总时间


这当然是我的代码库,但我认为我可以排除使用XStream作为效率的一种手段。但从一开始,XMLType和xpathing似乎不是很有效。

您可能需要研究XMLType索引: