语义网和关联数据就像外太空:那里没有生命。要在那里待上一段时间……嗯,我不知道你小时候说“我想当宇航员”时,别人是怎么跟你说的。但你可以在地球上观察那里发生的事情;成为一名业余甚至专业的天文学家要容易得多。
本文将探讨RDF存储领域近几个月来的最新趋势。第一段中的比喻灵感来源于下方那张气势恢宏的宣传图片。
史诗般的画面

一、RDF 访问的 GraphQL
GraphQL 声称是通用数据库访问语言。 以及使用 GraphQL 访问 RDF 的能力如何?
开箱即用,这个机会由:
- 星狗(, );
- TopQuadrant 产品 (, ).
如果存储库不提供这样的机会,则通过编写适当的“解析器”(resolver)来独立实现。 例如,这是在法国项目中完成的 . 或者你已经可以什么都不写了,只需要 .
从语义 Web 和关联数据的正统拥护者的角度来看,所有这一切当然是令人难过的,因为它似乎旨在用于围绕下一个数据孤岛构建的集成,而不是合适的平台(当然,RDF 存储) .
比较 GraphQL 和 SPARQL 的印象是双重的。
- 一方面,GraphQL 看起来像是 SPARQL 的远亲:它解决了 REST 典型的重选和多重查询问题——如果没有这些,可能就无法考虑 查询语言,至少对于网络而言;
- 另一方面,GraphQL 的刚性方案令人不安。 因此,与 RDF 的完全反身性相比,它的“内省性”似乎非常有限。 并且没有属性路径的模拟,所以它甚至不是很清楚为什么它是“Graph-”。
二。 MongoDB 适配器
与前一个趋势互补的趋势。
- 现在在 Stardog - 特别是,所有都在同一个 GraphQL 上 - 将 MongoDB 数据的显示配置为虚拟 RDF 图;
- GraphDB 近期 插入到 MongoDB 查询的 SPARQL 片段中。
更广泛地说,关于 JSON 源的适配器允许或多或少地“即时”将存储在这些源中的 JSON 表示为 RDF,那么我们也可以在相当长的一段时间内回忆起现有的适配器 可以调整 , 到 Apache 耶拿。
总结前两个趋势,我们可以说 RDF 存储库展示了在“多存储”(多语言持久性)条件下集成和运行的充分准备。 然而,众所周知,后者早已过时,取而代之的是 多重建模。 那么 RDF 存储领域的多重建模又如何呢?
总之,没办法。 我想单独写一篇文章来讨论多模型 DBMS,但是现在你可以看到,现在还没有“基于”图模型(RDF 可以被认为是它的变体)的多模型 DBMS。 关于一些小型多模型——由替代 LPG 图模型的 RDF 存储支持——将在中讨论 .
三、 OLTP 对比联机处理程序
然而,同一个 Gartner 多建模是一个必要条件,主要是为了 手术室 数据库管理系统。 这是可以理解的:在“多存储”的情况下,主要问题出现在事务性上。
但是在 OLTP-OLAP 范围内,RDF 存储库在哪里? 我会这样回答:不在那里也不在这里。 为了表明它们的用途,需要一些第三种缩写。 作为一种选择,我建议 联机处理 — 在线智能处理。
然而,仍然:
- 在 GraphDB 中与 MongoDB 实现的集成机制并不是最不重要的 解决写入性能问题;
- Stardog 走得更远更彻底 引擎,再次以提高写入性能为目标。
现在,让我来介绍一位市场上的新玩家。它来自 IBM Netezza 和 Amazon Redshift 的创建者—— . 文章开头放了一张基于它的产品广告的图片。 AnzoGraph 将自己定位为 GOLAP 解决方案。 您如何看待带有窗口函数的 SPARQL? —
SELECT ?month (COUNT(?event) OVER (PARTITION BY ?month) AS ?events) WHERE { … }四、 岩石数据库
以上已经 到 Stardog 7 Beta 的公告,其中表示 Stardog 将使用 RocksDB 作为底层存储系统——键值存储,Facebook 的谷歌 LevelDB 分支。 为什么值得谈论某种趋势?
首先,通过判断 ,不仅RDF存储库被“移植”到RocksDB。 在 ArangoDB、MongoDB、MySQL 和 MariaDB、Cassandra 中都有使用 RocksDB 作为存储引擎的项目。
其次,相应主题的项目(即不是产品)是在RocksDB上做的。
例如,eBay 在中使用 RocksDB 为你的“知识图谱”。 顺便说一句,读起来很有趣: 查询语言最初是一种本土格式,但最近它已经转变为更像 SPARQL. 就像一个笑话:无论我们做了多少知识图谱,我们仍然得到 RDF。
另一个例子——出现在几个月前 . 在引入之前,维基数据的历史信息必须通过 到标准的 Mediawiki API。 现在在纯 SPARQL 中有很多可能。 “引擎盖下”还有 RocksDB。 顺便说一句,WDHQS 做到了,看起来是参与将 Freebase 导入 Google Knowledge Graph 的人。
五、液化石油气支持
让我提醒您 LPG 图和 RDF 图之间的主要区别。
在 LPG 中,标量属性可以附加到边缘实例,而在 RDF 中,它们只能附加到边缘“类型”(但不仅是标量属性,还包括普通链接)。 与液化石油气相比,RDF 的这种局限性 某种建模技术。 LPG 相比 RDF 的局限性更难克服,但是 LPG 图比 RDF 图更像是 Harari 教科书中的图片,所以人们想要它们。
显然,“支持液化石油气”的任务分为两部分:
- 对 RDF 模型进行更改,使其可以在其中模拟 LPG 构造;
- 对 RDF 查询语言进行更改,使访问此修改后的模型中的数据成为可能,或者实现以流行的 LPG 查询语言查询此模型的能力。
五.1. 数据模型
这里有几种可能的方法。
五.1.1。 单例属性
协调 RDF 和 LPG 的最直接的方法可能是 :
- 而不是,例如,谓词
:isMarriedTo使用谓词:isMarriedTo1,:isMarriedTo2等等 - 然后这些谓词成为新三元组的主题:
:isMarriedTo1 :since "2013-09-13"^^xsd:date等等 - 这些谓词实例与一个共同谓词的联系是由以下形式的三元组建立的
:isMarriedTo1 rdf:singletonPropertyOf :isMarriedTo. - 显然,在
rdf:singletonPropertyOf rdfs:subPropertyOf rdf:type,但考虑一下为什么你不应该只写:isMarriedTo1 rdf:type :isMarriedTo.
“LPG 支持”的任务在这里在 RDFS 级别解决。 这样的决定需要包含在相关的 . 支持附加结果的 RDF 存储库可能需要进行一些更改,但目前,单例属性可被视为另一种建模技术。
五.1.2。 正确完成具体化
不那么幼稚的方法源于对属性实例由三元组完美实例化的认识。 通过能够讨论三元组,我们也可以讨论属性实例。
这些方法中最可靠的是 又名 RDR, 在 Blazegraph 的内部。 这是从一开始 为我自己和 AnzoGraph。 该方法的可靠性取决于以下事实:在其框架内 相应的变化 . 然而,要点非常简单。 在 RDF Turtle 序列化中,您现在可以这样写:
<<:bob :isMarriedTo :alice>> :since "2013-09-13"^^xsd:date .五.1.3。 其他方法
您可以不用理会形式语义,只需考虑三元组有一些标识符,当然是 URI,并用这些 URI 组成新的三元组。 剩下的就是在 SPARQL 中授予对这些 URI 的访问权限。 所以 星狗。
在快板中 以一种中间的方式。 众所周知,Allegrograph 中三元组的标识符 ,但是当实现三重属性时,它们不会突出。 然而,即使是形式语义也很遥远。 值得注意的是,三元组属性不是URI,这些属性的值也只能是字面量。 液化石油气的追随者得到了他们想要的。 在专门发明的 NQX 格式中,类似于上面的 RDF* 示例如下所示:
:bob :marriedTo :alice {"since" : "2013-09-13"}五.2. 查询语言
在模型级别以一种或另一种方式支持 LPG 后,您需要能够在此类模型中查询数据。
- Blazegraph for RDF* 查询支持 и . SPARQL* 查询如下所示:
SELECT * { <<:bob :isMarriedTo ?wife>> :since ?since }- Anzograph 还支持 并将支持 , Neo4j 中的查询语言。
- Stardog 维护自己的 SPARQL 和 格林姆林。 您可以使用如下方式在 SPARQL 中获取三元组的 URI 和“元信息”:
SELECT * {
BIND (stardog:identifier(:bob, :isMarriedTo, ?wife) AS ?id)
?id :since ?since
}- Allegrograph也支持自己的 SPARQL:
SELECT * { ("since" ?since) franz:attributesNameValue ( :bob :marriedTo ?wife ) }顺便说一下,GraphDB 曾一度支持 Tinkerpop/Gremlin,但不支持 LPG,但在 8.0 或 8.1 版本中停止了。
六。 收紧许可证
“首选三元组存储”和“开源三元组存储”这两个集合的交集近期并无新增。新的开源RDF数据存储距离成为日常使用的可行方案还很遥远,而且我们想要使用的新RDF数据存储(例如AnzoGraph)的源代码是闭源的。更有可能的是,这类数据存储的数量甚至有所减少……
当然,以前的开源也不是封闭的,只是一些开源的仓库逐渐不被认为是值得选择的了。 在我看来,拥有开源版本的 Virtuoso 充满了错误。 Blazegraph 被 AWS 收购并构成了 Amazon Neptune 的基础; 现在尚不清楚是否至少会再发布一次。 只剩下珍娜了……
如果开源不是很重要,只是想尝试一下,那么一切也没有以前那么美好了。 例如:
- 星狗 分发免费版(但是,普通版的试用期翻了一番);
- в 之前用户可以选择免费的基本套餐,但现在已暂停新用户注册。
总的来说,对于一个普通的 IT 外行来说,空间变得越来越难以接近,它的发展正在成为企业的很多。
来源: habr.com
