【问题标题】:Jena TDB physical query plan with multiple FROM clauses具有多个 FROM 子句的 Jena TDB 物理查询计划
【发布时间】:2016-10-21 08:12:26
【问题描述】:

我试图弄清楚 Jena TDB 如何在物理查询计划级别处理带有多个 FROM 子句的 SPARQL 查询。 我想知道 Jena TDB 如何处理对不同图形的查询。

我做了一些小实验并查看了查询代数,但是我不清楚FROM 子句如何影响代数。 看起来 FROM 子句在代数中被丢弃了。我希望代数是通过图的并集来评估的,但我想确定一下。

我有以下四边形:

<http://example.com/book2/> <http://example.com/price> "5"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.com/A> .
<http://example.com/book2/> <http://example.com/title> "Lord of the Rings" <http://example.com/B> .

以及以下查询:

SELECT (AVG(?price) as ?total)
FROM <http://example.com/A>
FROM <http://example.com/B>
WHERE {
    ?book <http://example.com/price> ?price .
    ?book <http://example.com/title> ?title .
}

./tdbquery --loc test --query test.sparql --explain

查询代数如下:

INFO  exec                 :: ALGEBRA
  (project (?total)
    (extend ((?total ?.0))
      (group () ((?.0 (avg ?price)))
        (bgp (triple ?book <http://example.com/price> ?price)))))

当我对数据执行查询时,我收到了预期的结果。

【问题讨论】:

    标签: sparql jena arq


    【解决方案1】:

    FROM(和FROM NAMED)实际上并不是查询的一部分,而是指示要查询的数据集应该是什么。这些子句不会改变查询将做什么,只会改变它的操作,所以你在代数中看不到它们。

    特定处理器对该信息的处理方式各不相同:

    • 某些处理器将构建请求的数据集(甚至下载数据)
    • 但在 API 中显式提供数据集(例如 query(query_string, dataset))也很常见,在这种情况下,由于提供了数据集,处理器将忽略它。
    • 也可能在SPARQL protocol request 中提供数据集,在这种情况下,与API 调用一样,处理器将忽略NAMED 子句。

    现在 TDB 数据库是一个数据集,但 TDB 有一个称为 'dynamic datasets' 的特殊功能,它使用 FROMFROM NAMED 形成一个有效的子数据集,将查询的图形限制为 @987654330 中提到的那些@ 子句。

    【讨论】:

    • 在我上面介绍的情况下,需要在某些时候合并数据集才能回答查询。如果查询在图 A 和图 B 上执行,则不会产生答案。我想知道具体是如何工作的。
    • 啊哈! TDB 有一个特殊功能:dynamic datasets,这就是您的查询有效的原因。
    • 我明白了,你知道动态数据集是什么时候构建的吗?是在回答查询之前完成一次还是针对查询计划中的每个“叶子”完成一次?我上面的例子是为了简单地展示这个问题,如果我的意思不清楚,我会发布一个新问题,用一个例子来解释这个问题。
    • 我之所以询问这个被推送到查询计划叶子的原因是因为我做了一个小实验,我将相同的 1000 个三元组拆分为 10、100 和 1000 个图。在实验中,我观察到某些查询的查询运行时间呈指数增长。如果我首先执行一个 CONSTRUCT 查询来创建一个包含所有三元组的单个图,那么查询几乎是线性的。我只是想弄清楚这种行为的原因是什么。
    • 动态数据集本质上是 Jena API 中的一个间接点。它实质上拦截了查询引擎请求的每个数据库扫描,并将其转换为多个数据库扫描,将结果合并在一起。这种合并还必须考虑重复删除,因为图是一个数学集。您在更多底层数据库扫描中拆分数据的图表越多。 TDB 中的所有扫描都使用索引,但从 10 到 100 个图会导致所需的扫描次数增加 10 倍,依此类推。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多