【问题标题】:Appropriate repositories in Jena for property paths with arbitrary lengthsJena 中适用于任意长度属性路径的存储库
【发布时间】:2016-05-14 11:13:12
【问题描述】:

我正在使用任意长度的属性路径运行 SPARQL 1.1 查询。 我可以在 Sesame Sail Repository 中非常高效地运行这些查询。但是,在 Jena 中使用 Dataset(从 Graph 创建)或 Model(TDB) 时,它们的运行速度非常慢。

除了 TDB 或 Graph 之外,Jena 还有其他可能性吗?

示例: 对于一个 60 MB 的 n3 rdf 文件,大约有 600,000 个三元组和以下查询:

SELECT ?x ?y {
 ?x <http://relationship.com/wasRevisionOf>+ ?y .
 ?x <http://relationship.com/wasGeneratedBy>/<http://relationship.com/wasAssociatedWith> ?z1 .
  ?y <http://relationship.com/wasGeneratedBy>/<http://relationship.com/wasAssociatedWith> ?z2 .
  FILTER(?z1 = ?z2  && ?x=<http://article.com/524910968> && ?y=<http://article.com/524753791>) 
} LIMIT 3

使用 Jena TDB 执行此查询需要 14 秒,JENA Graph 大约需要 38 秒,在 Sesame Sail Repository Memory Store 中只需要 100-150 毫秒*

  • 这 100-150 毫秒适用于从 1mb 到 200mb 的每个文件大小,所需的三元组包含在所有文件中。

【问题讨论】:

  • 请注意结束原因 “寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及最短的代码有必要在问题本身中重现它。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。"您能否提供一个示例,其中属性路径在耶拿很慢但在赛欧很快?
  • 您问“除了模型和图形之外,耶拿还有其他可能性吗?”,但我认为这不是一个正确的问题,因为这些只是具有不同实现的接口。内存中的模型或图表可能会很慢,但如果您有大量数据,您可能应该将数据存储为 TDB 数据集,该数据集具有索引并且可能效率更高。
  • 谢谢,我想这已经是答案了。我会在 TDB 上做实验,然后告诉你。
  • 我在帖子中提供了更多详细信息。

标签: sparql rdf jena sesame


【解决方案1】:

虽然我确实建议您尝试 TDB 以利用基于磁盘的索引,但这里我要指出一些可以帮助任何 SPARQL 引擎做得更好的事情。在您的查询中,您有一个带有一些相当简单条件的 过滤器。一个可能的问题是,从概念上讲,filter 表示要获得可能的结果,然后将它们修剪掉。现在,对于简单的条件,一个好的优化器可能会识别出可以在查询期间应用的过滤器,以防止过度工作。

在这种情况下,您要求 ?z1 = ?z2 当您可以简单地使用一个变量而不是两个变量时。当您可以简单地使用 value 或 values 块时,您还可以使用一些过滤器为 ?x?y 设置指定的值.希望这不会产生任何影响,但请考虑按照以下思路进行一些重写:

select ?x ?y {
  values (?x ?y) { (<...> <...>) }
  ?z ^(:wasGeneratedBy/:wasAssociatedWith) ?x, ?y .
  ?x :wasRevisionOf+ ?y .
}
limit 3

一般来说(但不一定在您的情况下)可能有帮助的另一件事是,按照措辞,搜索可以天真地执行为从 ?z 值开始,查找 ?x 和 ?y 的值,并且然后检查在?x 和?y 之间是否有合适的路径。但是由于 ?x 和 ?y 可以按任一顺序匹配,并且修订路径可能只在一个方向上,所以首先在子查询中寻找合适的 ?x ?y 对,然后在外部查询。不过,这在您的情况下可能并不重要,因为您从一开始就修复了 ?x 和 ?y 的值。

【讨论】:

  • 非常感谢。这是一个改进(大约 50%),但仍然无法与 Sesame 中的 MemoryStore(sail 存储库)相提并论。 (大约 10 秒对 100-150 毫秒)。
  • 我在 Jena 中使用内存图再次运行此优化查询,所有文件大小大约需要 300-400 毫秒。谢谢。
猜你喜欢
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多