【发布时间】:2016-10-25 07:58:54
【问题描述】:
我正在使用 GraphDB Free 7.1,并使用默认设置创建了一个存储库。我上传了一个包含 270 万个三元组的 ttl 文件。我正在尝试发出一个查询(不是很复杂,但很复杂),它应该返回 200k 个答案,Workbench 只显示 1k 个答案,GraphDB 日志显示一个异常
10:52:19.580 [repositories/PaaSport] INFO c.o.f.sesame.RepositoryController - POST query -1325396809
10:52:29.594 [repositories/PaaSport] ERROR o.o.h.s.r.TupleQueryResultView - Query interrupted
org.openrdf.query.QueryInterruptedException: Query evaluation took too long
...
10:52:29.594 [repositories/PaaSport] INFO o.o.h.s.r.TupleQueryResultView - Request for query -1325396809 is finished
我正在使用的查询是:
SELECT DISTINCT ?offering ?Value
WHERE {
?offering a paasport:Offering ;
DUL:satisfies ?groundDescription .
?groundDescription paasport:offers ?characteristic .
?characteristic a paasport:Storage ;
DUL:hasParameter ?par .
?par a paasport:StorageCapacity ;
DUL:hasParameterDataValue ?Value ;
DUL:parametrizes ?qualityValue .
?qualityValue uomvocab:measuredIn ?Units .
?Units a ?AppParMeasureUnitType .
ucum:GB a ?AppParMeasureUnitType .
?Units a uomvocab:SimpleDerivedUnit .
ucum:GB a uomvocab:SimpleDerivedUnit .
ucum:GB uomvocab:derivesFrom ?BasicUnit .
?Units uomvocab:derivesFrom ?BasicUnit .
ucum:GB uomvocab:modifierPrefix ?prefix1 .
?Units uomvocab:modifierPrefix ?prefix2 .
?prefix1 uomvocab:factor ?Factor1 .
?prefix2 uomvocab:factor ?Factor2 .
FILTER( xsd:double(?Factor2)*?Value = xsd:double(?Factor1)*4)
}
由于查询超时设置为0,不知道是什么原因导致查询中断异常;最有可能是记忆问题? 非常简单的查询(例如返回某个类的所有实例)可以正常工作。
有什么提示吗?任何帮助,将不胜感激。 如果需要,我可以提供更多详细信息。
最好, 尼克
【问题讨论】:
-
查询好像太复杂了。可以分享一下查询吗?您是否尝试更改查询某些部分的顺序?有时这可以帮助查询计划优化器选择更有效的执行计划。此外,可能还有一些 GraphDB 配置参数,但我不是这个三重存储的专家。
-
SELECT DISTINCT ?offering ?Value WHERE { ?offering rdf:type paasport:Offering . ?offering DUL:satisfies ?groundDescription . ?groundDescription paasport:offers ?characteristic . ?characteristic rdf:type paasport:Storage . ?characteristic DUL:hasParameter ?par . ?par rdf:type paasport:StorageCapacity . ?par DUL:hasParameterDataValue ?Value . ?par DUL:parametrizes ?qualityValue . ?qualityValue uomvocab:measuredIn ?Units . -
?Units rdf:type ?AppParMeasureUnitType . ucum:GB rdf:type ?AppParMeasureUnitType . ?Units rdf:type uomvocab:SimpleDerivedUnit . ucum:GB rdf:type uomvocab:SimpleDerivedUnit . ucum:GB uomvocab:derivesFrom ?BasicUnit . ?Units uomvocab:derivesFrom ?BasicUnit . ucum:GB uomvocab:modifierPrefix ?prefix1 . ?Units uomvocab:modifierPrefix ?prefix2 . ?prefix1 uomvocab:factor ?Factor1 . ?prefix2 uomvocab:factor ?Factor2 . FILTER( xsd:double(?Factor2)*?Value = xsd:double(?Factor1)*4) } -
谢谢。一条评论:如果您编辑您的问题,它会更具可读性......我现在为您完成了。