Virtuoso本地RDF四元组存储和Virtuoso基于SQL的RDF三元组存储之间的区别

3
我目前正在调查Virtuoso,我很想知道本机RDF Quad Store和基于SQL的RDF Triple Store之间的区别,如此页面所示(向下滚动一点查看图表):http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtJenaProvider 我知道本机RDF Quad Store在底层使用传统的关系数据库,但它经过优化,可以更快地使用SPARQL进行查询。这让我感到困惑!因为我想知道SQL基础的RDF Triple存储现在是什么样的......
谢谢!
2个回答

9
Virtuoso实际上是一整套应用程序和服务层,建立在他们自己的SQL数据库之上,因此很容易引起混淆。本地RDF Quad存储是Virtuoso自己的Quad存储实现,具有讽刺意味的是,正如您所指出的那样,它实际上是基于SQL的。这完全存储和实现在Virtuoso自己的SQL数据库实现中。因此,尽管它是基于SQL的,但它具有固定的表格布局,并使用自定义数据类型来存储数据。
基于SQL的RDF三元组存储是商业版本Virtuoso的一个特性,允许您定义映射规则,将任意普通关系型数据库(包括基于Virtuoso和其他后端的数据库,例如MySQL、PostgreSQL)视为RDF存储。
性能差异来自于本地Quad存储具有已知的布局、自定义RDF数据类型以及在Virtuoso堆栈中特定于它的许多软件优化。因此,当Virtuoso接收SPARQL并将其编译成等效的SQL查询时,它在其数据库上运行得非常高效。使用自定义RDF数据类型使它们可以将所有SPARQL逻辑推入查询引擎层中,这也使评估更快。
对于基于SQL的三元组存储,涉及到映射层,必须调用SQL数据库(可能是外部的)并将其内容转换为RDF形式,以便然后执行必要的计算来回答SPARQL查询。映射步骤可能非常昂贵,并且使查询更难优化,因为它们可以访问有关RDF数据的较少的前期信息。
此外,由于数据通常只是标准的SQL类型,他们无法将某些逻辑推入底层查询引擎,因为在许多情况下,SQL和SPARQL类型语义不匹配。因此,必须提取值,适当地进行转换,然后在查询引擎层上计算表达式结果,然后根据需要反馈。这会降低性能,因为引擎必须在不同的处理上下文之间切换,并且可能需要进行许多SQL查询才能回答相同的SPARQL查询。

2
这是一个非常好的答案!非常感谢您所付出的努力!我能看到使用基于SQL的存储存在的缺点,但是我们的客户要求使用基于关系型数据库。有了这个前提,基于SQL的RDF三元组存储是否总是外部关系型数据库?并且,由于我们将使用命名图形,您知道它是否可以存储四元组吗?再次感谢您的帮助 :) - Rens Groenveld

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接