為什麼說圖形數據庫是大數據時代的利器?

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

你也許聽說過圖形數據庫,也知道它不是存儲圖片文件的數據庫。但是:為什麼總有人吹捧它是大數據時代的利器?是數據庫領域重大的技術革新?它和傳統的關係型數據庫相比有哪些優劣?本文將帶你揭開圖形數據庫的神秘面紗。

什麼是圖形數據庫

要理解圖形數據庫,你暫時還不需要具備太多圖論的知識。實際上,圖形數據庫(GDBMS)在筆者眼中比關係數據庫(RDBMS)更容易理解。

圖(Graph)由頂點(Vertex)和邊(Edge)組成。

在圖形數據庫領域,我們有時候喜歡把頂點和邊稱為節點(Node)和關係(Relationship),但顯然它們是同一回事。

每個節點表示一個實體(個人、地點、事物、類別或其他數據塊),每個關係表示兩個節點的關聯關係。

例如,兩個節點中國和台灣的關係是台灣屬於中國;而兩個節點台灣和 鳳梨酥的關係是鳳梨酥是 台灣的特產。

為什麼圖數據庫是未來的必然趨勢?

我們生活的世界充滿了對象之間的相互聯繫,你能舉出一個例子,某一對象是完全孤立、不和外界發生任何關聯嗎?圖數據庫在描述、存儲、查詢這些關聯時具有天生優勢。

我們繼續擴展上面的例子,上海也屬於中國,陸家嘴位於上海,喬治在陸家嘴上班,佩奇是喬治的姐姐,佩奇來自台灣,喬治雖然出生在內地但是去過台灣,喬治還很喜歡吃鳳梨酥。

如果你是業務/產品工作人員,你一定希望你的產品或者業務涉及到用戶的方方面面。如果你是開發人員,你一定希望能夠簡單高效地描述這個紛繁複雜的世界。

在傳統的技術方中,一般會用關係型數據庫對數據進行持久化(長時存儲)。那麼為了描述上圖中的模型,我們需要建立多少張表呢?國家、省/市、人、食品、地標、國家與省/市關係、省/市與食品關係、人與省/市關係、人與……至少十幾張表。

這倒沒什麼大不了的。

現在請查詢:在哪些城市上班的人最喜歡吃鳳梨酥?

嗯……你只需要關聯食品表、人員表、人喜歡的食品關聯關係表三張表就可以查到喬治等人喜歡吃鳳梨酥,但是你還得再關聯兩張表找到他們在哪個地標工作,進而再關聯兩張表找到這些地標在哪個城市。還沒完,你還得group by一下,再排個序。

你會覺得這個查詢簡直有病。但這恰恰是數據分析師最基本的工作,也是大數據時代海量信息處理的一個縮影。

利用圖形數據庫,我們可以更輕易地描述和更方便地查詢上圖所示的關係。下一節我們將看到,在關聯關係更複雜的情形下,圖形數據庫的查詢效率遠遠高於關係型數據庫。

圖數據庫 VS 關係型數據庫

1.性能

大數據時代,人類社會的數據量呈爆發式增長。任何業務或產品所積累的數據一定是快速增長的,這沒有疑義,但更重要的是,數據與數據之間的關係數目將呈現平方級增長:

3個點最多有6條有向邊,4個點最多有12個有向邊,N個節點最多有N *(N-1)個有向邊。

在傳統的數據庫中,隨著關係的數量和深度的增加,關係查詢的效率將急劇衰減,甚至崩潰。

然而圖形數據庫的性能將幾乎不變,即使數據每天都在增長。

這個性能差異有多大呢,引用Neo4j(一款圖形數據庫)發布的測試數據,我們希望在一個社交網路里找到最大深度為指定值的朋友組合。

在100萬人的人群中,設置每個人大約有50個朋友,隨機選擇兩個人,是否存在一條路徑,使得他們之間的關聯關係長度為2或3或4或5?

對於不同的關聯深度,圖形數據庫與關係型數據庫執行時間對比如下表。

可見,在這種關聯關係複雜且關聯深度較大的情形下,用圖形數據庫對陣關係型數據庫簡直好比降維打擊。

2.靈活性:

圖形數據模型的結構和模式隨著解決方案和行業的變化而變化。開發團隊不必提前對未來的需求進行詳盡的建模(然後在某些業務/產品人員要求更改後徹底地推翻重做);相反,新的節點、關係、節點的屬性還有關係的屬性都可以後期添加到現有結構中,完全不會危及當前的功能。

一個有趣的說法是:面對圖形數據庫模型,你只需要口述你的需求,然後讓它作出改變;而關係型數據庫模型則恰好相反,它告訴你它的需求,迫使你適應它那該死的表格結構。

3.敏捷性:

使用圖形技術開發完全符合當今的敏捷、測試驅動的開發實踐,它允許數據層支持的應用程序隨著業務需求的發展而快速迭代更新。

有哪些好用的圖形數據庫?

圖形數據庫技術日益發展的今天,已經有不少優秀的項目誕生並在各領域大展身手,比如:

Neo4j, Titan, OrientDB, JanusGraph, ArangoDB等。

技術參考將於近期推出圖形數據庫橫評文章,詳細介紹各項目的前世今生和優劣高低。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!