首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache-camel Xpathbuilder性能

Apache-camel Xpathbuilder性能
EN

Stack Overflow用户
提问于 2019-11-25 19:56:54
回答 2查看 205关注 0票数 0

我有以下问题。我设置了一个camel -project来解析某些xml文件。我必须从文件中选择取出某些节点。

我有两个文件246 in和347 in的大小。在上面给出的例子中,我正在提取250个节点的父子对。

有了默认工厂,这里就是时代了。对于246 106文件respt 77秒和106秒。我想提高性能,因此切换到撒克逊和时间如下,47秒和54秒。我至少把时间缩短了一半。

是否有可能进一步缩短时间,我可以使用的任何其他工厂或优化将不胜感激。

我正在使用XpathBuilder来切断x路径。下面是一个例子。如果不需要重复创建XpathBuilder,似乎必须为每个xpath构建它,我将有一个实例并不断地将xpath注入其中,也许它将进一步提高性能。

代码语言:javascript
复制
 return XPathBuilder.xpath(nodeXpath)
            .saxon()
            .namespace(Consts.XPATH_PREFIX, nameSpace)
            .evaluate(exchange.getContext(), exchange.getIn().getBody(String.class), String.class);

根据Michael的评论添加更多细节。所以我加入了他们的行列,下面我的例子会变得很清楚。我要把他们合而为一。因此,我们开始,让我们说,我们有下面的第一和第二路径映射。

bm:Document/bm:xxxxx/bm:PmtInf{0}/bm:ReqdExctnDt/text() pData.tinf.pIdentifi.instId://bm:Document/bm:xxxxx/bm:PmtInf{0}/bm:CdtTrfTxInf{1}/bm:PmtId/bm:InstrId/text():pData.tinf.rexd

这将导致如下所示的json

代码语言:javascript
复制
pData:{
  tinf: {
   rexd: <value_from_xml>
}
 pIdentifi:{

    instId: <value_from_xml>
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-29 12:01:39

实际上,我能把时间缩短到10秒。我用的是阿帕奇骆驼。因此,我在那里添加了线程,以便可以在单独的线程中读取多个文件。读取文件后,它将根据必须遍历的节点的长度进行串行操作。我意识到这里没有必要是串行的,所以介绍了parrallelStream,现在这给了它足够的能量。再次保护线程的一件事是不要有大量的线程,因为这会降低性能。因此,我试图将线程数量限制在两倍或三倍于操作机器上的核心数量。

票数 0
EN

Stack Overflow用户

发布于 2019-11-26 01:02:53

很难说,如果没有看到实际的XPath表达式,但考虑到文件大小和执行时间,我猜您正在执行一个join,它是作为笛卡尔产品天真地执行的,即具有O(n*m)性能。也许有某种方法来重组它,使其具有对数性能,但关键在于细节。Saxon非常擅长自动优化连接查询;如果不是,通常有手动实现的方法--尽管XSLT提供了比XPath更多的选项(例如使用xsl:keyxsl:merge)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59039219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档