Virtuoso 42000 错误 估计的执行时间



使用 DBpedia-Live SPARQL 端点 http://dbpedia-live.openlinksw.com/sparql,我正在尝试计算与owl:Thing类型实例关联的三元组总数。由于计数非常大,因此抛出异常"Virtuoso 42000 错误估计执行时间"。为了摆脱这种情况,我尝试在查询中使用子选择、limitoffset。但是,当offset大于等于limit时,解决方案不起作用并且再次抛出相同的异常(Virtuoso 42000 错误),任何人都可以确定我的查询问题吗?还是建议解决方法?提供的是我正在尝试的查询:

select count(?s) as ?count
where
{
?s ?p ?o
{
select ?s
where
{
?s rdf:type owl:Thing.
}
limit 10000
offset 10000
}
}

您的解决方案始于耐心。Virtuoso的"随时查询"功能在超时发生时返回一些结果,并继续在后台运行查询 - 因此,如果您稍后返回,通常会获得更多解决方案,直到完整的结果集。

我不得不猜测你的原始查询,因为你只发布了你试图使用的零碎查询——

select ( count(?s) as ?count )
where
{
?s rdf:type owl:Thing.
}

我在几秒钟内得到了 3,923,114,没有遇到任何超时。 我在表单上设置了 3000000 毫秒(= 3000 秒 = 50 分钟)的超时 - 与端点的默认超时 30000 毫秒(= 30 秒)相反——但显然既没有命中这些,也没有命中端点的服务器端配置超时。

我想你已经明白这一点,但请注意,这个计数是一个移动的目标,并且会随着 DBpedia-Live 内容继续从维基百科火带更新而定期变化。


你的分而治之努力有一个重大问题。 请注意,如果没有ORDER BY子句与LIMIT/OFFSET子句结合使用,您可能会发现某些解决方案(在本例中为某些值?s)重复和/或某些解决方案永远不会出现在组合所有这些部分结果的最终聚合中。

另外,当您尝试计算三元组时,您可能应该做一个count(*)而不是count (?s)。 如果没有别的,这有助于查询的读者了解你在做什么。


为了能够在查询命中时调整这样的执行时间限制 - 最简单的方法是通过DBpedia-Live AMI实例化您自己的镜像;不幸的是,由于多种原因,目前不适用于新客户。 (现有客户可以继续使用其 AMI。 我们可能会在某个时候恢复这一点,但时间是不确定的;您可以打开支持案例以注册您的兴趣,并在 AMI 可供新用户使用时收到通知。


迈向最终解决方案... 可能比您目前正在研究的方法更好的方法来实现您的实际最终目标。 您可以考虑在DBpedia邮件列表或OpenLink社区论坛上提问。

最新更新