繁体   English   中英

使用推理时如何提高sparql查询的性能?

[英]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可能会急切地计算等价关系,从而减少查询的开销,但是同样,您应该在他们的邮件列表中处理这些问题。

无论如何,推理都不是一件容易的事,并且没有比魔术师更容易使用推理的灵丹妙药了,而不仅仅是使用更简单的表达方式,本体论或数据更少,或两者兼而有之。

最后,您可以尝试其他为推理而设计的数据库,例如OWLIMStardog 并非所有数据库都是平等创建的,而且很有可能您已经在TBox中编码了Virtuoso可能无法很好处理但可以被另一个系统轻松处理的某些内容。

许多因素可能导致您描述的性能问题。 最常见的是在INI文件的NumberOfBuffers设置中产生错误-在这里我们看不到,因此无法诊断。

通常,最好在公开的OpenLink讨论论坛Virtuso用户邮件列表或通过机密的支持案例中提出有关Virtuoso的问题。 如果您将其带到那里,我们应该能够为您提供更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM