【问题标题】:How to improve the SPARQL query performance of SDB?如何提高 SDB 的 SPARQL 查询性能?
【发布时间】:2011-09-19 07:36:07
【问题描述】:

在我的应用程序中,我使用的 SPARQL 数据库是 Jena 的 SDB,数据库服务器是 DB2。但我发现 SPARQL 的查询性能非常低。

谁能帮我解决这个问题?如何提高sparql的查询性能,特别是SDB的查询性能?

以下是我的测试用例数据和 SPARQL:

测试用例

总rdf三重计数为13294。查询结果三重计数为420。 查询耗时 42 秒。

SPARQL 是

SELECT DISTINCT ?s ?name ?ownerId ?status ?time 
  ?value ?startTime ?endTime ?description 
WHERE 
{
  ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> "http://www.w3c.com/schemas/cp#Event" .
  ?s <http://www.w3c.com/schemas/cp#time> ?time .
  ?s <http://www.w3c.com/schemas/cp#ownerId> ?ownerId .
  ?s <http://www.w3c.com/schemas/cp#name>  ?name .
  ?s <http://www.w3c.com/schemas/cp#value> ?value .
  ?s <http://www.w3c.com/schemas/cp#_status> ?status .
  ?s <http://www.w3c.com/schemas/cp#start_Time> ?startTime .
  ?s <http://www.w3c.com/schemas/cp#end_Time> ?endTime .
  ?s <http://www.w3c.com/schemas/cp#description> ?description .
  FILTER(xsd:dateTime(?time) >= "2011-08-12T00:00:00"^^xsd:dateTime  
    && xsd:dateTime(?time) <= "2011-09-18T23:59:59"^^xsd:dateTime) 
}

【问题讨论】:

    标签: performance sparql jena


    【解决方案1】:

    任何像 SDB 这样的 Triplestore 的查询性能总是比原生的 Triplestore 差,因为像 SDB 这样的 SQL 支持的 Triplestore 必须将 SPARQL 下编译成 SQL,这通常会创建极其复杂的 SQL 查询。

    因此,以您的示例为例,您要求匹配 9 个三元组模式,这将生成一个包含 9 个 INNER JOIN 操作的 SQL SELECT,这将花费大量时间来开始。

    然后您将 FILTER 应用于这些三元组模式,您遇到的问题是除非过滤器表达式非常简单或足够接近 SQL 以将其转换为它,否则 FILTER 必须在内存中的 Java 代码。这实际上意味着您在三元存储中选择我们所有可能的事件,然后使用 Java 过滤内存中的日期范围,这总是会使您的查询变慢。

    除非有特定原因要使用 SDB,否则我真的建议您查看 Jena 的原生三重存储 TDBTDB2。它旨在更有效地执行 SPARQL 查询所需的联接类型,并且它存储数据的方式使其能够更快地执行更复杂的过滤器,例如您的日期范围。

    【讨论】:

    • 忘了补充一点,在 jena-users@incubator.apache.org 邮件列表中寻求帮助可能总是值得的
    • 绝对正确——在过滤真正开始之前,您可能已经获得了相当一部分返回的数据。如果时区已标准化,您可以尝试简单的字符串比较 (str(?time) &gt;= "2011-08-12T00:00:00")。
    • @use205512 好主意,但不确定这是否使它成为 SDB 将向下编译为 SQL 的过滤器,尽管我希望它会这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2017-01-21
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多