【问题标题】:Optic API vs CTS query performance光学 API 与 CTS 查询性能
【发布时间】:2021-07-02 03:26:30
【问题描述】:

我使用以下两个查询(Optic and CTS) 来获取路径范围索引/tXML/Item/PutawayCategory 的值。

查询 1: - 大约花了。 4 milliseconds 执行并返回 17 个不同的值。我尝试多次执行相同的查询。

xquery version "1.0-ml";
import module namespace op="http://marklogic.com/optic"  at "/MarkLogic/optic.xqy";

op:from-lexicons(map:entry("PutawayCategory", cts:path-reference("/tXML/Item/PutawayCategory")))
=> op:where-distinct()
=> op:result()

查询 2: - 大约花了。 0.30 milliseconds 得到与Query 1 相同的结果

xquery version "1.0-ml";

cts:values(cts:path-reference("/tXML/Item/PutawayCategory"))

我不明白为什么 Optic Query 的执行时间比 cts 查询要多。

请帮助我理解这一点。

【问题讨论】:

    标签: marklogic marklogic-10


    【解决方案1】:

    将您的光学查询更改为使用op:group-by("PutawayCategory") 而不是op:where-distinct(),它的性能应该会更好。

    xquery version "1.0-ml";
    import module namespace op="http://marklogic.com/optic"  at "/MarkLogic/optic.xqy";
    
    op:from-lexicons(map:entry("PutawayCategory", cts:path-reference("/tXML/Item/PutawayCategory")))
    => op:group-by("PutawayCategory")
    => op:result()
    

    op:from-lexicon

    Optic 根据同一个文档中词典值的共现发出行,类似于cts:value-tuples

    这意味着op:from-lexicons()正在返回多个文档中存在的值的每个实例,并且可以多次返回,而不是一个不同的列表,然后op:where-distinct()正在过滤和去重复,这会消耗CPU和时间。值集越大,op:where-distinct() 必须做的工作(和时间)就越多。

    cts:values() 直接从 path-range-index 词典中提取不同的值列表,因此要做的工作更少。

    MarkLogic 可能有一种方法可以使用op:where-distinct() 优化光学查询。如果您有权访问 MarkLogic 支持,那么如果您创建一个支持案例来查询它会很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多