首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高Marklogic 7在以下方面的性能:/*[fn:name()=“the”]

如何提高Marklogic 7在以下方面的性能:/*[fn:name()=“the”]
EN

Stack Overflow用户
提问于 2016-02-25 23:17:14
回答 3查看 97关注 0票数 2

我有一个基本的查询:

代码语言:javascript
复制
/*[fn:name()="something"]

(1) Marklogic 7占用多秒时间,是否有我可以添加的索引来使查询更快?

(2)在记忆限制方面,应增加哪一项以改善工作表现?

(3)是否有其他方法来提高不同查询的性能,但得到完全相同的结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-25 23:25:40

尝试使用fn:node-name代替。我相信这是优化的。您需要正确处理名称空间,这也是为什么可以优化名称空间而fn:name不能优化名称空间的部分原因。

代码语言:javascript
复制
 /*[fn:node-name()=fn:QName("","something")] 
票数 5
EN

Stack Overflow用户

发布于 2016-02-26 00:49:14

以下两个xPaths应该完全相同:

代码语言:javascript
复制
/theNameOfMyElement

代码语言:javascript
复制
/*[fn:name()="theNameOfMyElement"]

后者增加了一个不必要且代价高昂的限定词。首先,*必须搜索所有东西,而不仅仅是元素。这种做法还存在其他几个问题。

如果我的第一个查询仍然需要很长时间,请使用cts:search,因为它搜索索引的速度要快得多。上面的查询可以这样写:

代码语言:javascript
复制
cts:search(/theNameOfMyElement, ())

其中第二个参数(空序列)可以是限定的cts:query

如果名称空间为您提供了适合,您可以这样做:

代码语言:javascript
复制
/*:theNameOfMyElement

对我来说,/*[fn:name()="something"]似乎是很糟糕的练习。使用/something代替。

编辑

在看到另一个答案被接受后,我一直在想,如果他的解决方案和我的解决方案不起作用,你必须尝试解决什么情况。我仍然非常肯定,只要使用xPath的设计方式,还有更快的方法。

经过一些思考后,我决定您的“真实”场景必须包含一个动态元素名,或者您可能试图查看元素名称是否与一系列名称中的一个匹配。

我用下面提供的输出编写了一个示例,演示了如何在不使用基于fn:node-name的限定符的情况下使用这两种方法

代码语言:javascript
复制
let $xml as element(sample) := <sample>
    <wrapper>
      <product>
        <entry>
          <red>$1.00</red>
          <yellow>$3.00</yellow>
          <blue>$4.50</blue>
        </entry>
      </product>
    </wrapper>
  </sample>
let $type as xs:string := "product"
return $xml/wrapper/xdmp:unpath($type)/entry/(red|yellow)

(: Returns 
  <red>$1.00</red>
  <yellow>$3.00</yellow> 
:)
票数 2
EN

Stack Overflow用户

发布于 2016-02-26 06:09:29

除了其他好的建议,考虑应用分页。MarkLogic可以快速地从索引中识别出感兴趣的内容,但从磁盘中提取实际内容的速度相对较慢。同时发送所有结果可能意味着在通过线路发送回复之前,尝试将所有结果(可能有数十亿)保存在内存中。分页允许在批处理中提取结果,这使内存使用率保持在较低的水平,并且可能还允许并行化。

哈哈!

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

https://stackoverflow.com/questions/35640376

复制
相关文章

相似问题

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