在MarkLogic中优化SPARQL查询

时间:2016-04-15 18:38:51

标签: optimization sparql marklogic

在许多SPARQL系统中,您可以通过以图形模式重新排序三元组来优化查询。在其他情况下,你不能(查询引擎使用它自己的一些启发式优化它们)

在Jena中,您可以通过在查询的早期放置大多数限制结果集的三重模式来优化查询(并确保始终提及已绑定的某个变量)。在其他查询引擎中,此策略不起作用(因为它们以不同方式处理查询)

显然,Marklogic SPARQL对三重模式的排序很敏感(我重新安排了一些查询,发现它们会更快或更慢,多达10倍)。但我找不到任何押韵或理由哪个序列变得更快或更慢。我与Jena成功使用的启发式方法与MarkLogic不兼容。

我搜索了一下并查看了MarkLogic文档,但没有找到任何关于此的建议。有没有任何MarkLogic查询引擎编写者对此做过任何注释?

2 个答案:

答案 0 :(得分:2)

优化级别向优化器提供一个提示,告诉它花多少时间来寻找最佳查询计划。 任何优化器都会花一些时间来找到最佳计划,但必须平衡找到该计划所花费的时间与使用最佳计划的好处。我们大多数人在现实生活中经历过这种权衡(!)

优化级别1表示“做一些工作寻找最好的计划,但不要发疯”。 2级说“做更多的工作来找到最好的计划”。 0级表示“只是按原样查询”。

对于大多数查询,级别1是合适的,这是默认值。如果您有一个特别复杂的查询,请尝试使用级别2,并查看查找计划以使查询更快的额外时间实际上是否在整个查询时间内得到回报。如果您有非常简单的查询,请尝试级别0。

答案 1 :(得分:0)

我向MarkLogic内部的PM和工程团队的专家们询问过。我被告知,"无论您对模式的顺序如何,都应该获得相同的性能,因为我们有一个复杂的查询优化器。如果情况不对,请提交错误。"了解您正在使用的MarkLogic的特定版本,optimization level以及一些示例查询也很有用。