【发布时间】: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 上做实验,然后告诉你。
-
我在帖子中提供了更多详细信息。