【发布时间】:2012-10-10 13:46:14
【问题描述】:
我想提高我的 sparql 查询的性能。我必须运行所有类型的 sparql 查询。 我在图中总共有 17,500,000 个三元组,并且我还有其他仅包含知识的图。该图包含相同的 as 和 subclassOf 属性。该图的三元组总数约为 50,000,000,我在 sparql 查询中使用动态推理。
我使用 virtuoso 作为数据库。它具有推理功能。
当我使用推理运行查询时,简单查询需要 80 秒。并且不使用推理需要 10 秒。
Sparql 查询:
DEFINE input:inference 'myrule'
select DISTINCT ?uri1 ?uri2
from <GRAPH_NAME>
where {?uri1 rdf:type ezdi:Aspirin.
?patient ezdi:is_treated_with ?uri1.
?patient rdf:type ezdi:Patient.
?uri2 rdf:type ezdi:Hypertension .
?patient ezdi:is_suffering_with ?uri2.
?patient rdf:type ezdi:Patient } ORDER BY ?patient
我已经完成了大师提供的所有索引。系统有 32 GB RAM。 而且我已经完成了 NumberOfBuffer 设置 virtuoso.ini 文件。
我不知道推理有什么问题。但我必须在 sparql 查询中使用推理。
如果你知道什么,请分享你的想法。
谢谢
【问题讨论】:
-
您可以尝试正确格式化数字的大小,并清楚地区分 TBox 的大小与 ABox 的大小。此外,您在查询中定义规则时似乎正在使用自定义推理,因此您可能会解释该规则中的内容。
-
感谢您的回复,但我不知道什么是 tbox 和 abox。如果你有一些教程或任何信息,请分享给我。
-
我正在使用 virtuoso 提供的函数 "rdfs_rule_set("rule_name","graph_name")"。这样我们就可以在 sparql 查询中使用 rule_name 了。
-
TBox 是你的本体,ABox 是你的数据。您的数据库大小仍然格式错误。我不知道您的数据库中是否有 1.75M 或 1.75B 三元组。如果您正在使用语义技术,您应该花时间阅读 RDF 和 OWL 入门。如果您要做的不仅仅是 RDFS 推理,您可能还需要阅读描述逻辑手册。
-
是的,在本体中,三元组总数为 5M,而在数据中,三元组总数为 17.5M。这不是数据库大小,这是三元组的总数。再次感谢您的回复。
标签: sparql semantic-web virtuoso