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 知識圖譜的人。

五、液化石油氣支持

讓我提醒您 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 存儲庫可能需要進行一些更改,但目前,Singleton Property 可被視為另一種建模技術。

五.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 外行來說,空間變得越來越難以接近,它的發展正在成為企業的很多。

來源: www.habr.com

添加評論