初學者圖形資料庫:其他圖形技術
快速回顧:NoSQL矩陣
NoSQL資料庫的巨集觀世界是多種多樣的,其中圖形資料庫只是其中的一部分。上週,我們瀏覽了下面矩陣的三個藍色象限,這些象限統稱為聚合商店,包括鍵值,寬列(或列族)和文件庫。
本週,我們將雙擊同樣多樣化的圖形技術世界,它佔據了下面矩陣中的綠色象限。
NoSQL資料庫的矩陣。藍色象限統稱為聚合商店。
圖資料庫技術的譜
我們已在第一篇文章中逐步介紹了圖形資料庫的正式定義,但讓我們快速回顧一下。
圖形資料庫是一種線上操作資料庫管理系統,能夠在圖形資料模型上執行建立,讀取,更新和刪除(CRUD)過程。
圖資料庫技術有兩個重要屬性:
圖儲存
- 本機
圖形處理引擎
原生圖處理(即無索引鄰接)是在圖中處理資料的最有效方法,因為連線的節點在資料庫中物理地“指向”彼此。非本機圖處理引擎使用其他方法來處理CRUD操作。
除了儲存和處理的細節外,圖形資料庫還採用了不同的資料模型。最常見的圖形資料模型包括屬性圖,超圖和RDF三元組。
讓我們深入瞭解下面的每一個。
屬性圖
屬性圖是我們已經討論過的圖資料庫的型別。實際上,我們對圖資料庫的原始定義更準確地說是屬性圖(如下圖所示)。
以下是對資料模型屬性圖的簡要概述:
屬性圖包含節點(資料實體)和關係(資料連線)。
節點可以包含屬性(即鍵值對)。
節點可以用一個或多個標籤標記。
關係有名稱和方向。
關係始終具有起始節點和結束節點。
與節點一樣,關係也可以包含屬性。
Neo4j是一個屬性圖資料庫。
超圖
超圖是一種圖形資料模型,其中關係(稱為超邊緣)可以連線任意數量的給定節點。雖然屬性圖允許關係只有一個起始節點和一個結束節點,但超圖模型允許在關係的任何一端有任意數量的節點。
當您的資料包含大量多對多關係時,超圖可能很有用。
我們來看下面的例子。
在這個簡單的(定向)超圖中,我們看到Alice和Bob是三輛車的擁有者,但是我們可以使用一個超級表達來表達這種關係。
理論上,超圖應該產生準確的,資訊豐富的資料模型。然而,在實踐中,我們很容易在建模時遺漏一些細節。例如,讓我們看一下下圖,它是上面顯示的超圖的等價的屬性圖。
此屬性圖模型需要多個OWNS
關係來表示超圖僅使用一個超邊點捕獲的內容。然而,通過使用六種關係而不是一種關係,我們有兩個明顯的優勢:
首先,我們使用更熟悉和明確的資料建模技術(減少了開發團隊的混淆)。
其次,我們還可以使用諸如“主要驅動程式”(用於保險目的)等屬性對模型進行微調,這是我們無法對單個超邊緣進行的操作。
因為超邊界是多維的,超圖模型比屬性圖更加通用。然而,這兩者是同構的,所以你總是可以將超圖表示為屬性圖(雖然有更多的關係和節點) - 而你卻不能反過來。
雖然屬性圖被廣泛認為具有實用性和建模效率的最佳平衡,但超圖顯示了它們在捕獲元意圖方面的特殊優勢。例如,如果你需要與另一個關係限定一個關係(例如,我喜歡你喜歡那輛車的事實。哇,那麼元。),那麼超圖通常比屬性圖需要更少的基元。
超圖或屬性圖是否最適合您取決於您的建模思維方式以及您正在構建的應用程式型別。
三重商店
三重儲存來自語義Web運動,並以稱為三元組的格式儲存資料。三元組由主題 - 謂詞 - 物件資料結構組成。
使用三元組,我們可以捕捉諸如“與弗雷德的姜舞”和“弗雷德喜歡冰淇淋”等事實。單獨地,單個三元組在語義上不是非常有用,但是它們是集體的,它們提供了豐富的資料集,從中可以收集知識並推斷出連線。
三重儲存是圍繞W3C規定的資源描述框架(RDF)規範建模的,使用SPARQL(發音為“sparkle”)作為它們的查詢語言。
RDF三元組資料模型的示例
由三元組商店處理的資料往往是邏輯連結的,因此三元組商店包含在圖形資料庫的類別中。但是,三重儲存不是本機圖形資料庫,因為它們不支援無索引鄰接,它們的儲存引擎也不是為儲存屬性圖而優化的。
三重儲存將三元組儲存為獨立元素,這允許它們水平縮放但阻止它們快速遍歷關係。為了執行圖形查詢,三元組儲存必須從單獨的獨立事實建立連線 - 為每個查詢新增延遲。
由於在規模和延遲方面的這些權衡,三重儲存的最常見用例是離線分析而不是線上交易。
閱讀本文,瞭解有關RDF三重儲存和標記屬性圖資料庫之間差異的更多資訊。
結論
Euler會很自豪地看到我們用他的圖論氣球動物做了什麼(“那裡,那裡,小傢伙,非常可愛。”)。那是因為有很多不同的圖形技術 - 我們甚至沒有進行圖形分析或圖形視覺化!
就像我們上週看到的聚合商店一樣,每種型別的圖資料庫技術都最適合不同的功能。超圖非常適合捕獲元意圖,而RDF三重儲存非常適合離線分析。但對於線上,事務處理沒有什麼比快速遍歷資料連線的屬性圖更好。