越來越火的圖數據庫究竟是什麼?

隨着社交、電商、金融、零售、物聯網等行業的快速發展,現實社會織起了了一張龐大而複雜的關係網,傳統數據庫很難處理關係運算。大數據行業需要處理的數據之間的關係隨數據量呈幾何級數增長,亟需一種支持海量複雜數據關係運算的數據庫,圖數據庫應運而生。

世界上很多著名的公司都在使用圖數據庫。比如:

  • 社交領域:Facebook, Twitter,Linkedin用它來管理社交關係,實現好友推薦
  • 零售領域:eBay,沃爾瑪使用它實現商品實時推薦,給買家更好的購物體驗
  • 金融領域:摩根大通,花旗和瑞銀等銀行在用圖數據庫做風控處理
  • 汽車製造領域:沃爾沃,戴姆勒和豐田等頂級汽車製造商依靠圖數據庫推動創新制造解決方案
  • 電信領域:Verizon, Orange和AT&T 等電信公司依靠圖數據庫來管理網絡,控制訪問並支持客戶360
  • 酒店領域:萬豪和雅高酒店等頂級酒店公司依使用圖數據庫來管理複雜且快速變化的庫存

既然圖數據庫應用這麼廣泛,越來越多的企業和開發者開始使用它,那它究竟什麼過人之處呢,下面我們來揭開它的神祕面紗。

 

1. Why Graph DB?

學過數據結構這麼課程的同學腦海中應該或多或少有的概念。

 

1.1 什麼是圖?

圖由兩個元素組成:節點關係

每個節點代表一個實體(人,地,事物,類別或其他數據),每個關係代表兩個節點的關聯方式。這種通用結構可以對各種場景進行建模 - 從道路系統到設備網絡,到人口的病史或由關係定義的任何其他事物。

 

1.2 什麼是圖數據庫?

圖數據庫(Graph database)並非指存儲圖片的數據庫,而是以這種數據結構存儲和查詢數據。

圖形數據庫是一種在線數據庫管理系統,具有處理圖形數據模型的創建,讀取,更新和刪除(CRUD)操作。

與其他數據庫不同,關係在圖數據庫中佔首要地位。這意味着應用程序不必使用外鍵或帶外處理(如MapReduce)來推斷數據連接。

與關係數據庫或其他NoSQL數據庫相比,圖數據庫的數據模型也更加簡單,更具表現力。

圖形數據庫是爲與事務(OLTP)系統一起使用而構建的,並且在設計時考慮了事務完整性和操作可用性。

 

1.3 兩個重要屬性

根據存儲和處理模型不同,市面上圖數據庫也有一些區分。

比如:
Neo4J就是屬於原生圖數據庫,它使用的後端存儲是專門爲Neo4J這種圖數據庫定製和優化的,理論上說能更有利於發揮圖數據庫的性能。

JanusGraph不是原生圖數據庫,而將數據存儲在其他系統上,比如Hbase。

① 圖存儲

一些圖數據庫使用原生圖存儲,這類存儲是經過優化的,並且是專門爲了存儲和管理圖而設計的。並不是所有圖數據庫都是使用原生圖存儲,也有一些圖數據庫將圖數據序列化,然後保存到關係型數據庫或者面向對象數據庫,或其他通用數據存儲中。

② 圖處理引擎

原生圖處理(也稱爲無索引鄰接)是處理圖數據的最有效方法,因爲連接的節點在數據庫中物理地指向彼此。非本機圖處理使用其他方法來處理CRUD操作。

 

2. 對比

2.1 與NoSQL數據庫對比

NoSQL數據庫大致可以分爲四類:

  • 鍵值(key/value)數據庫
  • 列存儲數據庫
  • 文檔型數據庫
  • 圖數據庫

NoSQL數據庫

分類 數據模型 優勢 劣勢 舉例
鍵值數據庫 哈希表 查找速度快 數據無結構化,通常只被當作字符串或者二進制數據 Redis
列存儲數據庫 列式數據存儲 查找速度快;支持分佈橫向擴展;數據壓縮率高 功能相對受限 HBase
文檔型數據庫 鍵值對擴展 數據結構要求不嚴格;表結構可變;不需要預先定義表結構 查詢性能不高,缺乏統一的查詢語法 MongoDB
圖數據庫 節點和關係組成的圖 利用圖結構相關算法(最短路徑、節點度關係查找等) 可能需要對整個圖做計算,不利於圖數據分佈存儲 Neo4j、JanusGraph

 

2.2 與關係型數據庫對比

關係型數據庫實際上是不擅長處理關係的。很多場景下,你的業務需求完全超出了當前的數據庫架構。

舉個栗子:假設某關係型數據庫中有這麼幾張用戶、訂單、商品表:

image

當我們要查詢:“用戶購買了那些商品?” 或者 “該商品有哪些客戶購買過?” 需要開發人員JOIN幾張表,效率非常低下。

而“購買該產品的客戶還購買了哪些商品?”類似的查詢幾乎不可能實現。

關係查詢性能對比
在數據關係中心,圖形數據庫在查詢速度方面非常高效,即使對於深度和複雜的查詢也是如此。在《Neo4j in Action》這本書中,作者在關係型數據庫
和圖數據庫(Neo4j)之間進行了實驗。

image

他們的實驗試圖在一個社交網絡裏找到最大深度爲5的朋友的朋友。他們的數據集包括100萬人,每人約有50個朋友。實驗結果如下:

深度 MySQL執行時間(s) Neo4J執行時間(s) 返回記錄數
2 0.016 0.01 ~2500
3 30.267 0.168 ~110 000
4 1543.505 1.359 ~600 000
5 未完成 2.132 ~800 000

在深度爲2時(即朋友的朋友),兩種數據庫性能相差不是很明顯;深度爲3時(即朋友的朋友的朋友),很明顯,關係型數據庫的響應時間30s,已經變得不可接受了;深度到4時,關係數據庫需要近半個小時才能返回結果,使其無法應用於在線系統;深度到5時,關係型數據庫已經無法完成查詢。而對於圖數據庫Neo4J,深度從3到5,其響應時間均在3秒以內。

可以看出,對於圖數據庫來說,數據量越大,越複雜的關聯查詢,約有利於體現其優勢。從深度爲4/5的查詢結果我們可以看出,圖數據庫返回了整個社交網絡一半以上的人數。

 

3. Neo4J 和 JanuasGraph

根據DB-Engines最新發布的圖數據庫排名,Neo4J仍然大幅領先排在第一位:

DB-Engines 19年2月圖數據庫排名

Neo4J

Neo4J

Neo4J是由Java實現的開源圖數據庫。自2003年開始開發,直到2007年正式發佈第一版,並託管於GitHub上。

Neo4J支持ACID,集羣、備份和故障轉移。目前Neo4J最新版本爲3.5,分爲社區版和企業版,社區版只支持單機部署,功能受限。企業版支持主從複製和讀寫分離,包含可視化管理工具。

JanusGraph

 

JanusGraph是一個Linux基金會下的開源分佈式圖數據庫 。JanusGraph提供Apache2.0軟件許可證。該項目由IBM、Google、Hortonworks支持。JanusGraph是由TitanDB 圖數據庫修改而來,TitanDB從2012年開始開發。目前最新版本爲0.3.1。

JanusGraph支持多種儲存後端(包括Apache Cassandra、Apache HBase、Bigtable、Berkeley DB)。JanusGraph的可擴展性取決於與JanusGraph一起使用的基礎技術。例如,通過使用Apache Cassandra作爲存儲後端,可以將JanusGraph簡單地擴展到多個數據中心。

JanusGraph通過與大數據平臺(Apache Spark,Apache Giraph,Apache Hadoop)集成,支持全局圖數據的分析、報告和ETL。

JanusGraph通過外部索引存儲(Elasticsearch,Solr,Lucene)支持地理、數字範圍和全文搜索。

 

3.1 標記屬性圖模型

 

(1)節點

  • 節點是主要的數據元素
  • 節點通過關係連接到其他節點
  • 節點可以具有一個或多個屬性(即,存儲爲鍵/值對的屬性)
  • 節點有一個或多個標籤,用於描述其在圖表中的作用
  • 示例:人員節點與Car節點

(2)關係

  • 關係連接兩個節點
  • 關係是方向性的
  • 節點可以有多個甚至遞歸的關係
  • 關係可以有一個或多個屬性(即存儲爲鍵/值對的屬性)

(3)屬性

  • 屬性是命名值,其中名稱(或鍵)是字符串
  • 屬性可以被索引和約束
  • 可以從多個屬性創建複合索引

(4)標籤

  • 標籤用於將節點分組
  • 一個節點可以具有多個標籤
  • 對標籤進行索引以加速在圖中查找節點
  • 本機標籤索引針對速度進行了優化

 

4. Cypher圖查詢語言

Cypher是Neo4j的圖形查詢語言,允許用戶存儲和檢索圖形數據庫中的數據。

舉例,我們要查找Joe的所以二度好友:

image

查詢語句如下:

MATCH 
  (person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
  (foaf:Person)
WHERE 
  person.name = "Joe"
  AND NOT (person)-[:KNOWS]-(foaf)
RETURN
  foaf    

Joe認識Sally,Sally認識Anna。 Bob被排除在結果之外,因爲除了通過Sally成爲二級朋友之外,他還是一級朋友。

 

5. 小結

圖數據庫應對的是當今一個宏觀的商業世界的大趨勢:憑藉高度關聯、複雜的動態數據,獲得洞察力和競爭優勢。國內越來越多的公司開始進入圖數據庫領域,研發自己的圖數據庫系統。對於任何達到一定規模或價值的數據,圖數據庫都是呈現和查詢這些關係數據的最好方式。而理解和分析這些圖的能力將成爲企業未來最核心的競爭力。

 

 

發佈了213 篇原創文章 · 獲贊 26 · 訪問量 81萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章