天天看點

科普| 什麼是圖資料庫?

背景回複"加群",加入新技術

科普| 什麼是圖資料庫?

随着社交、電商、金融、零售、物聯網等行業的快速發展,現實社會織起了了一張龐大而複雜的關系網,傳統資料庫很難處理關系運算。

大資料行業需要處理的資料之間的關系随資料量呈幾何級數增長,亟需一種支援海量複雜資料關系運算的資料庫,

圖資料庫

應運而生。

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

  • 社交領域

    :Facebook, Twitter,Linkedin用它來管理社交關系,實作好友推薦
  • 零售領域

    :eBay,沃爾瑪使用它實作商品實時推薦,給買家更好的購物體驗
  • 金融領域

    :摩根大通,花旗和瑞銀等銀行在用圖資料庫做風控處理
  • 汽車制造領域

    :沃爾沃,戴姆勒和豐田等頂級汽車制造商依靠圖資料庫推動創新制造解決方案
  • 電信領域

    :Verizon, Orange和AT&T 等電信公司依靠圖資料庫來管理網絡,控制通路并支援客戶360
  • 酒店領域

    :萬豪和雅高酒店等頂級酒店公司依使用圖資料庫來管理複雜且快速變化的庫存

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

Why Graph DB?

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

什麼是圖?

圖由兩個元素組成:節點 和 關系 。

每個節點代表一個實體(人,地,事物,類别或其他資料),每個關系代表兩個節點的關聯方式。

這種通用結構可以對各種場景進行模組化 - 從道路系統到裝置網絡,到人口的病史或由關系定義的任何其他事物。

什麼是圖資料庫?

`圖資料庫(Graph database)`` 并非指存儲圖檔的資料庫,而是以圖這種資料結構存儲和查詢資料。

圖形資料庫

是一種線上資料庫管理系統,具有處理圖形資料模型的建立,讀取,更新和删除(CRUD)操作。

與其他資料庫不同, 關系在圖資料庫中占首要地位。這意味着應用程式不必使用外鍵或帶外處理(如MapReduce)來推斷資料連接配接。

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

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

兩個重要屬性

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

比如:

Neo4J

就是屬于原生圖資料庫,它使用的後端存儲是專門為Neo4J這種圖資料庫定制和優化的,理論上說能更有利于發揮圖資料庫的性能。

而 JanusGraph 不是原生圖資料庫,而将資料存儲在其他系統上,比如Hbase。

① 圖存儲

一些圖資料庫使用 原生圖存儲 ,這類存儲是經過優化的,并且是專門為了存儲和管理圖而設計的。

并不是所有圖資料庫都是使用原生圖存儲,也有一些圖資料庫将圖資料序列化,然後儲存到關系型資料庫或者面向對象資料庫,或其他通用資料存儲中。

② 圖處理引擎

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

對比

與NoSQL資料庫對比

NoSQL資料庫大緻可以分為四類:

  • 鍵值(key/value)資料庫
  • 列存儲資料庫
  • 文檔型資料庫
  • 圖資料庫
科普| 什麼是圖資料庫?
科普| 什麼是圖資料庫?

與關系型資料庫對比

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

舉個栗子:假設某關系型資料庫中有這麼幾張使用者、訂單、商品表:

科普| 什麼是圖資料庫?

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

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

關系查詢性能對比

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

科普| 什麼是圖資料庫?

他們的實驗試圖在一個社交網絡裡找到最大深度為5的朋友的朋友。他們的資料集包括100萬人,每人約有50個朋友。

實驗結果如下:

科普| 什麼是圖資料庫?

在深度為2時(即朋友的朋友),兩種資料庫性能相差不是很明顯;深度為3時(即朋友的朋友的朋友),很明顯,關系型資料庫的響應時間30s,已經變得不可接受了;深度到4時,關系資料庫需要近半個小時才能傳回結果,使其無法應用于線上系統;深度到5時,關系型資料庫已經無法完成查詢。

而對于圖資料庫Neo4J,深度從3到5,其響應時間均在3秒以内。

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

Neo4J 和 JanuasGraph

根據DB-Engines最新釋出的圖資料庫排名,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)支援地理、數字範圍和全文搜尋。

标記屬性圖模型

科普| 什麼是圖資料庫?

(1)節點

節點是主要的資料元素

節點通過關系連接配接到其他節點

節點可以具有一個或多個屬性 (即,存儲為鍵/值對的屬性)

節點有一個或多個标簽 ,用于描述其在圖表中的作用

示例:人員節點與Car節點

(2)關系

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

(3)屬性

屬性是命名值,其中名稱(或鍵)是字元串

屬性可以被索引和限制

可以從多個屬性建立複合索引

(4)标簽

标簽用于将 節點 分組

一個節點可以具有多個标簽

對标簽進行索引以加速在圖中查找節點

本機标簽索引針對速度進行了優化

Cypher圖查詢語言

Cypher是Neo4j的圖形查詢語言,允許使用者存儲和檢索圖形資料庫中的資料。

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

科普| 什麼是圖資料庫?

查詢語句如下:

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成為二級朋友之外,他還是一級朋友。

小結

圖資料庫應對的是當今一個宏觀的商業世界的大趨勢:憑借高度關聯、複雜的動态資料,獲得洞察力和競争優勢。國内越來越多的公司開始進入圖資料庫領域,研發自己的圖資料庫系統。

對于任何達到一定規模或價值的資料,圖資料庫都是呈現和查詢這些關系資料的最好方式。而了解和分析這些圖的能力将成為企業未來最核心的競争力。

科普| 什麼是圖資料庫?