RDF 存储库现在发生了什么?

语义网和关联数据就像外太空:那里没有生命。 去那里或多或少长期……我不知道他们小时候对你说什么来回应“我想成为一名宇航员”。 但是你可以在地球上看到正在发生的事情; 成为业余天文学家甚至专业人士要容易得多。

本文将关注 RDF 存储领域最新的、不超过几个月的趋势。 第一段中的比喻灵感来自剪裁下的史诗宣传图片。


史诗般的画面

RDF 存储库现在发生了什么?

一、RDF 访问的 GraphQL

他们说GraphQL 声称是通用数据库访问语言。 以及使用 GraphQL 访问 RDF 的能力如何?

开箱即用,这个机会由:

如果存储库不提供这样的机会,则通过编写适当的“解析器”(resolver)来独立实现。 例如,这是在法国项目中完成的 数据旅游. 或者你已经可以什么都不写了,只需要 超GraphQL.

从语义 Web 和关联数据的正统拥护者的角度来看,所有这一切当然是令人难过的,因为它似乎旨在用于围绕下一个数据孤岛构建的集成,而不是合适的平台(当然,RDF 存储) .

比较 GraphQL 和 SPARQL 的印象是双重的。

  • 一方面,GraphQL 看起来像是 SPARQL 的远亲:它解决了 REST 典型的重选和多重查询问题——如果没有这些,可能就无法考虑 查询语言,至少对于网络而言;
  • 另一方面,GraphQL 的刚性方案令人不安。 因此,与 RDF 的完全反身性相比,它的“内省性”似乎非常有限。 并且没有属性路径的模拟,所以它甚至不是很清楚为什么它是“Graph-”。

二。 MongoDB 适配器

与前一个趋势互补的趋势。

  • 现在在星狗 也许 - 特别是,所有都在同一个 GraphQL 上 - 将 MongoDB 数据的显示配置为虚拟 RDF 图;
  • Ontotext GraphDB 最近 它允许 插入到 MongoDB 查询的 SPARQL 片段中。

更广泛地说,关于 JSON 源的适配器允许或多或少地“即时”将存储在这些源中的 JSON 表示为 RDF,那么我们也可以在相当长的一段时间内回忆起现有的适配器 SPARQL 生成可以调整 例如, 到 Apache 耶拿。

总结前两个趋势,我们可以说 RDF 存储库展示了在“多存储”(多语言持久性)条件下集成和运行的充分准备。 然而,众所周知,后者早已过时,取而代之的是 来了 多重建模。 那么 RDF 存储领域的多重建模又如何呢?

总之,没办法。 我想单独写一篇文章来讨论多模型 DBMS,但是现在你可以看到,现在还没有“基于”图模型(RDF 可以被认为是它的变体)的多模型 DBMS。 关于一些小型多模型——由替代 LPG 图模型的 RDF 存储支持——将在中讨论 第五节.

三、 OLTP 对比联机处理程序

然而,同一个 Gartner пишет多建模是一个必要条件,主要是为了 手术室 数据库管理系统。 这是可以理解的:在“多存储”的情况下,主要问题出现在事务性上。

但是在 OLTP-OLAP 范围内,RDF 存储库在哪里? 我会这样回答:不在那里也不在这里。 为了表明它们的用途,需要一些第三种缩写。 作为一种选择,我建议 联机处理 — 在线智能处理。

然而,仍然:

  • 在 GraphDB 中与 MongoDB 实现的集成机制并不是最不重要的 意向的 解决写入性能问题;
  • Stardog 走得更远更彻底 重写 引擎,再次以提高写入性能为目标。

现在让我介绍市场上的新玩家。 来自 IBM Netezza 和 Amazon Redshift 的创建者 - AnzoGraph™. 文章开头放了一张基于它的产品广告的图片。 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。

另一个例子——出现在几个月前 维基数据历史查询服务. 在引入之前,维基数据的历史信息必须通过 MWAPI 到标准的 Mediawiki API。 现在在纯 SPARQL 中有很多可能。 “引擎盖下”还有 RocksDB。 顺便说一句,WDHQS 做到了,看起来是参与将 Freebase 导入 Google Knowledge Graph 的人。

五、液化石油气支持

让我提醒您 LPG 图和 RDF 图之间的主要区别。

在 LPG 中,标量属性可以附加到边缘实例,而在 RDF 中,它们只能附加到边缘“类型”(但不仅是标量属性,还包括普通链接)。 与液化石油气相比,RDF 的这种局限性 克服 某种建模技术。 LPG 相比 RDF 的局限性更难克服,但是 LPG 图比 RDF 图更像是 Harari 教科书中的图片,所以人们想要它们。

显然,“支持液化石油气”的任务分为两部分:

  1. 对 RDF 模型进行更改,使其可以在其中模拟 LPG 构造;
  2. 对 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。 正确完成具体化

不那么幼稚的方法源于对属性实例由三元组完美实例化的认识。 通过能够讨论三元组,我们也可以讨论属性实例。

这些方法中最可靠的是 RDF*又名 RDR, 出生 在 Blazegraph 的内部。 这是从一开始 当选 为我自己和 AnzoGraph。 该方法的可靠性取决于以下事实:在其框架内 提供 相应的变化 RDF 语义. 然而,要点非常简单。 在 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* и 小鬼. SPARQL* 查询如下所示:

 SELECT * { <<:bob :isMarriedTo ?wife>> :since ?since }

  • Anzograph 还支持 SPARQL* 并将支持 暗号, 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 版本中停止了。

六。 收紧许可证

最近没有添加到“triplestore of choice”和“open source triplestore”集的交集。 新的开源 RDF 存储远不是日常使用的好选择,我想使用的新三元组存储的源代码(例如 AnzoGraph)已关闭。 相反,我们可以谈论减少......

当然,以前的开源也不是封闭的,只是一些开源的仓库逐渐不被认为是值得选择的了。 在我看来,拥有开源版本的 Virtuoso 充满了错误。 Blazegraph 被 AWS 收购并构成了 Amazon Neptune 的基础; 现在尚不清楚是否至少会再发布一次。 只剩下珍娜了……

如果开源不是很重要,只是想尝试一下,那么一切也没有以前那么美好了。 例如:

  • 星狗 停止 分发免费版(但是,普通版的试用期翻了一番);
  • в 图数据库云,您之前可以选择免费基本计划的地方,暂停新用户注册。

总的来说,对于一个普通的 IT 外行来说,空间变得越来越难以接近,它的发展正在成为企业的很多。

来源: habr.com

添加评论