Virtuoso原生RDF四元存储和基于Virtuoso SQL的RDF三元存储之间的区别

Virtuoso原生RDF四元存储和基于Virtuoso SQL的RDF三元存储之间的区别,rdf,triplestore,virtuoso,Rdf,Triplestore,Virtuoso,我目前正在调查Virtuoso,我很想知道本机RDF四元存储和基于SQL的RDF三元存储之间的区别,如本页所示(向下滚动一点以查看图): 我知道本机RDF四元存储使用传统的关系数据库,但它通过SPARQL进行了优化,以满足更快的请求。这让我很困惑!因为我想知道现在基于SQL的RDF三重存储是什么 提前谢谢 Virtuoso实际上是一整套应用程序和服务层,构建在它们自己的SQL数据库之上,因此这种混乱是可以理解的 本机RDF四元存储是Virtuoso自己的四元存储实现,讽刺的是,正如您所指出的,

我目前正在调查Virtuoso,我很想知道本机RDF四元存储和基于SQL的RDF三元存储之间的区别,如本页所示(向下滚动一点以查看图):

我知道本机RDF四元存储使用传统的关系数据库,但它通过SPARQL进行了优化,以满足更快的请求。这让我很困惑!因为我想知道现在基于SQL的RDF三重存储是什么


提前谢谢

Virtuoso实际上是一整套应用程序和服务层,构建在它们自己的SQL数据库之上,因此这种混乱是可以理解的

本机RDF四元存储是Virtuoso自己的四元存储实现,讽刺的是,正如您所指出的,它实际上是基于SQL的。这完全在Virtuoso自己的SQL数据库实现中存储和实现。因此,尽管它是基于SQL的,但它有一个固定的表布局,并使用自定义数据类型来存储数据

基于SQL的RDF Triple Store是指Virtuoso商业版本的一项功能,它允许您定义映射规则,将任意普通关系数据库(基于Virtuoso和其他基于后端的数据库,如MySql、PostgreSQL)视为RDF存储

性能差异 性能差异来自于这样一个事实,即本机Quad store在Virtuoso的堆栈中具有已知的布局、自定义RDF数据类型和许多特定于它的软件优化。因此,当Virtuoso接受SPARQL并将其编译为等效的SQL查询时,它将在其数据库上极其高效地运行。自定义RDF数据类型的使用允许他们将所有SPARQL逻辑下推到查询引擎层,这也加快了计算速度

对于基于SQL的Triple store,需要一个映射层,它们必须调用SQL数据库(可能是外部的)并将其内容转换为RDF形式,然后进行必要的计算以回答SPARQL查询。映射步骤可能会非常昂贵,并且会使查询更难优化,因为它们可以访问较少的关于RDF数据的预先信息

此外,由于数据通常只是标准SQL类型,它们无法将某些逻辑下推到底层查询引擎,因为SQL和SPARQL类型语义在许多情况下并不一致。因此,必须提取值,进行适当转换,然后在查询引擎层上计算表达式结果,然后根据需要反馈。这会降低性能,因为引擎必须在不同的处理上下文之间切换,并可能进行许多SQL查询以回答相同的SPARQL查询。

Virtuoso是一个使用SQL RDBMS核心实现的hyrbid(关系表和RDF属性图)数据服务器[1]。SQL RDBMS关系只有在相关数据源位于Virtuoso外部时才是外部的,例如,当使用ODBC或JDBC将外部RDBMS数据库中的表附加到Virtuoso时,作为其虚拟数据库功能的一部分[2]

[1] --Virtuoso技术架构图


[2] --虚拟数据库引擎

这是一个非常好的答案!非常感谢您为此付出的努力!我可以看出使用基于SQL的存储的缺点,但是,我们的客户需要一个底层关系数据库。话虽如此,基于SQL的RDF三重存储是否总是一个外部关系数据库?既然我们要处理命名图,你知道它是否可以存储四边形吗?再次提前感谢:)