[英]How can I increase performance of sparql query while using inferencing?
我想提高我的sparql查询的性能。 我必须运行所有类型的sparql查询。 我在图中共有17,500,000个三元组,而我还有其他仅包含知识的图。 此图包含和和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查询中使用推理。
如果您知道一些事情,请与我们分享您的想法。
谢谢
5M三元组的本体相当大,尽管严格地说,这没有问题。 推理的性能与其本体的表现力紧密相关,而不是其大小。 您可以创建一个本体,其本体的三元组数量要少几个数量级,这将很难进行推理。
话虽如此,我没有什么特别的建议。 Virtuoso特定的调整最好留给他们的开发人员,因此您可能会在他们的邮件列表上有一些吸引力。
看来您正在使用一些自定义推断“ my_rule”-尽管在注释中您还声明了RDFS和sameAs。 您可能需要弄清楚您实际使用的推理,本体属于哪种配置文件(RDFS或OWL2 QL,RL,EL,DL),并了解推理的实际工作原理。 此外,相等推理是困难的,您声称除了RDFS之外还要使用平等推理。 Virtuoso可能会急切地计算等价关系,从而减少查询的开销,但是同样,您应该在他们的邮件列表中处理这些问题。
无论如何,推理都不是一件容易的事,并且没有比魔术师更容易使用推理的灵丹妙药了,而不仅仅是使用更简单的表达方式,本体论或数据更少,或两者兼而有之。
最后,您可以尝试其他为推理而设计的数据库,例如OWLIM或Stardog 。 并非所有数据库都是平等创建的,而且很有可能您已经在TBox中编码了Virtuoso可能无法很好处理但可以被另一个系统轻松处理的某些内容。
有许多因素可能导致您描述的性能问题。 最常见的是在INI文件的NumberOfBuffers设置中产生错误-在这里我们看不到,因此无法诊断。
通常,最好在公开的OpenLink讨论论坛 , Virtuso用户邮件列表或通过机密的支持案例中提出有关Virtuoso的问题。 如果您将其带到那里,我们应该能够为您提供更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.