使用圖形數(shù)據(jù)庫模型數(shù)據(jù)

本文章所處階段為個(gè)人閱讀圖數(shù)據(jù)庫的相關(guān)書籍資料
以下圖片來自圖書 Graph database 第二版 ,O'Reilly圖書,Ian Robinson,Jim Webber & Emil Eifrem著

這里不再贅述圖形數(shù)據(jù)庫blahblah的優(yōu)點(diǎn),還有怎么安裝部署。
在很多文章中,都提到圖數(shù)據(jù)庫的一項(xiàng)用途:處理社會關(guān)系。比如


image.png

上圖應(yīng)該算是圖庫最基礎(chǔ)的應(yīng)用,因?yàn)楝F(xiàn)實(shí)生活中的社會關(guān)系并不是對稱的,而如果要用關(guān)系數(shù)據(jù)庫或者常見的kv cloumn nosql來實(shí)現(xiàn),則一個(gè)朋友關(guān)系就需要至少2個(gè)字段,friend of與 friend by。如果要查詢“朋友的朋友”,或“朋友的朋友的朋友”,那么數(shù)據(jù)庫的算法復(fù)雜度則會直線上升,直到任務(wù)由于查詢時(shí)間過長而無法完成。
并且,假設(shè)一對或單向的朋友關(guān)系(意識到自己把別人當(dāng)朋友,別人卻把自己不當(dāng)回事)結(jié)束,那么使用傳統(tǒng)的存儲方式,你還需要?jiǎng)h除上文中類似friend by字段中的內(nèi)容。

現(xiàn)在再上面應(yīng)用的基礎(chǔ)上,增加一點(diǎn)難度,或者說讓例子能更貼近廣大程序員的業(yè)務(wù)場景。


image.png

在這張圖中,包含了3張表的內(nèi)容(用戶、訂單與貨物)
同時(shí)也表現(xiàn)出一種“大同”的景象,在圖庫中,數(shù)據(jù)就是一個(gè)一個(gè)node,彼此都是完全平等的。所以我們需要用一個(gè)字段來表示某個(gè)node的角色,比如在neo4j中系統(tǒng)指定了label這個(gè)屬性,而dgraph并沒有指定,需要我們自行設(shè)置,這里需要注意。
另外需要指出這個(gè)most_recent關(guān)系,它和其他關(guān)系相比是不固定的,如果有了新訂單,可以馬上將這個(gè)most recent關(guān)系指向新的node。
而且訂單可能失效,可能被刪除。當(dāng)這個(gè)node被刪除后,相關(guān)的關(guān)系都會自動被清除。這也是圖數(shù)據(jù)庫的一大靈活性,如果你是一個(gè)經(jīng)驗(yàn)不足的程序員,在設(shè)計(jì)業(yè)務(wù)關(guān)系時(shí)是很容易遺漏這些應(yīng)該被清除的數(shù)據(jù),而圖數(shù)據(jù)庫則能自動幫你清理不要的“垃圾”

圖書在這里順便提到,現(xiàn)在的圖庫大多對數(shù)據(jù)節(jié)點(diǎn)node的字段有做一些類型處理,比如存儲地理信息,而不是說一個(gè)node就是簡單的kv鍵值對集合。在dgraph中,你還可以對node的某key執(zhí)行不同的索引策略。比如某key的類型是string,你可以對其應(yīng)用hash索引,也可以進(jìn)行全量索引。
但拋開這些細(xì)枝末節(jié)的內(nèi)容,我們需要把握一點(diǎn),關(guān)系是圖庫中的一等公民,而且你應(yīng)更抽象地理解這個(gè)“關(guān)系”,這里的關(guān)系不僅僅是node與node之間,node本身的各個(gè)自定義的kv也可以認(rèn)為是“關(guān)系”。

Chapter 3 Data Modeling with Graphs
1,相比傳統(tǒng)數(shù)據(jù)庫,圖庫的modeling更“白板友好”
2,一個(gè)node可以有多個(gè)label
3,注意設(shè)置node與node之間的關(guān)系方向,沒有變幻方向的關(guān)系,而應(yīng)明確的指出是從node A 指向node B
4,不光node可以具有屬性(properties,可以理解為就是node存儲的kv set),關(guān)系也是可以有屬性的,這樣就給實(shí)際應(yīng)用提供更多meta 數(shù)據(jù)
接下來圖書介紹的是如何利用上面這些簡單的原則來創(chuàng)建圖庫model,需要使用sql語言,圖書中介紹的是cypher,而dgraph使用的是GraphQL

先放一些書中介紹cypher時(shí)的圖片


image.png

image.png

image.png

cross-domain models


image.png

這張圖片是關(guān)于莎士比亞文學(xué)相關(guān)的內(nèi)容,通過 圖中關(guān)系線的類型,可以看到這跨越了3個(gè) domain。
所以這也是關(guān)系為什么重要的原因,關(guān)系可以幫助我們建立一個(gè)domian,也可以幫助我們將不同的domain之間的數(shù)據(jù)進(jìn)行關(guān)聯(lián)。

職業(yè)生涯


image.png

演員的表演記錄


image.png

發(fā)送郵件并抄送


image.png

可以注意到,圖中的關(guān)系,既可是一種動作,也可以是一個(gè)屬性
而數(shù)據(jù)節(jié)點(diǎn)node,既可以是動作的主體,也可以是動作的客體

影評家寫的影評


image.png

某電視節(jié)目的timeline tree(記錄一系列事件)


image.png

劇集之間的關(guān)系


image.png

再次強(qiáng)調(diào)關(guān)系需要方向

不同的關(guān)系應(yīng)對不同的需求


image.png

這個(gè)人通過ADDRESS關(guān)系擁有2個(gè)地址,這兩個(gè)地址分別應(yīng)用于兩種不同的場景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容