背景
如果你關注過db-engines.com,你很可能會發現有一種類别的資料庫在最近幾年正以火箭般的速度迅速流行起來,那就是Graph DBMS。阿裡雲于2019年3月重磅釋出了資料庫新産品——圖資料庫(Graph Database,簡稱GDB),本文将從圖資料庫的基本背景知識說起,帶你深入了解阿裡雲Cloud-Native圖資料庫GDB。

什麼是圖資料庫
“A graph database is a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data. A key concept of the system is the graph (or edge or relationship), which directly relates data items in the store a collection of nodes of data and edges representing the relationships between the nodes. The relationships allow data in the store to be linked together directly, and in many cases retrieved with one operation. Graph databases hold the relationships between data as a priority. Querying relationships within a graph database is fast because they are perpetually stored within the database itself. Relationships can be intuitively visualized using graph databases, making it useful for heavily inter-connected data.”,
上面是維基百科上對圖資料庫的一段定義描述以及一個簡單示例。簡單說來,典型的圖結構由點,邊和點邊對應屬性構成。圖資料庫則是針對圖這種結構的獨有特點而專門設計的一種資料庫,非常适合高度互連資料集的存儲和查詢。示例中描述的是一個極度簡化的社交關系圖,圓圈代表頂點(Vertex/Node), 有方向的線條代表邊(Edge),頂點或者邊都可以有屬性(Property)。現實中的,圖資料庫覆寫的應用場景非常廣泛,比較典型的有社交網絡,欺詐檢測,推薦引擎,知識圖譜和網絡/IT營運等。
圖資料庫 vs 傳統關系型資料庫
所謂術業有專攻,相對于傳統的關系型資料,圖資料庫更擅長高密互連的資料處理。讓我們先從Linkedin類似查詢為例來管中窺豹看看圖資料庫的價值。
比如,使用者UserId-xxx發起“_查詢自己2度好友中名字叫James的人_”這樣一個查詢請求。以傳統關系資料庫的做法,你可能會寫出如下查詢語句:
select * from t as t3 where t3.uid in(
select friend_uid from t as t2 where t2.uid in (
select friend_uid from t as t1 where t1.uid='UserId-xxx'
)
) and t3.name='James'
抛開查詢語句的複雜度,該類查詢語句在關系型資料庫中執行起來是非常低效的,往往要秒級才能正常傳回。如果進一步變為3度查詢,則更慢了。那麼,要是采用圖資料庫呢?以Gremlin為例,你可以很簡單的寫出這樣一段查詢語句:
g.V('UserId-xxx').repeat(both().simplePath()).times(2).dedup().has('name', 'James')
更為關鍵的是,這種2度,3度查詢請求在圖資料庫中處理起來是非常高效的,性能往往能夠輕松的達到傳統關系型資料庫的十倍乃至幾十倍。這種性能的差異并非簡單的調優問題,而是更深層次的資料庫模組化以及核心層面決定的。可以說,圖資料庫在基因層面更适合高度連接配接資料庫的處理。
下面的表格将從更多層面對二者進行對比:
分類 | 關系型資料庫 | 圖資料庫 |
---|---|---|
模型 | 表結構 | 圖結構 |
存儲資訊 | 高度結構化資料 | 結構化/半結構化資料 |
2度查詢 | 低效 | 高效 |
3度查詢 | 低效/不支援 | |
空間占用 | 中 | 高 |
圖模型
圖的概念源自圖論,大家如果有所了解,可能聽得最多的會是無向圖,有向圖這兩種概念。
圖分類 | 描述 | 示例 |
---|---|---|
無向圖 | 一個圖中所有的邊都是無方向的,比較典型例子就是facebook社交網絡中的好友關系。 | |
有向圖 | 圖中的邊是有方向的,比較典型的例子就是Twitter這種社交網絡中的關注關系。 | |
随着理論和技術的不斷演進,目前在圖資料庫的應用當中,最為流行的是下面兩種圖模型:
屬性圖 | 屬于有向圖,進一步細化了點和邊的屬性特點(部分進一步增加了Label概念),是目前圖資料庫采用的主流模型。 | |
RDF圖 | 核心是一種資源描述方式,每條描述都由主謂賓三元組構成。RDF作為W3C标準大量應用于知識圖譜等相關應用。 | |
RDF是目前W3C的一個推薦标準,同時有标準查詢語言SPARQL配合,在早期有大量RDF Stores産品出現。大家可以看到db-engines.com到目前還保留着RDF Stores這樣一個分類。後來,屬性圖模型被大量圖資料庫産品所采用,屬性圖相對RDF更為靈活,新的圖資料庫也逐漸侵蝕部分RDF Stores的市場,更有不少産品在屬性圖基礎之上做RDF及SPARQL的支援,以便無縫的承接RDF及SPARQL之上的各類應用及生态。
圖資料庫GDB整體介紹
阿裡雲圖資料庫(Graph Database, 簡稱GDB)是一種支援屬性圖模型,用于處理高度連接配接資料查詢與存儲的實時可靠的線上資料庫,支援 Apache TinkerPop Gremlin 查詢語言,可以幫助使用者快速建構基于高度連接配接的資料集的應用程式。阿裡雲圖資料庫GDB具有如下特點:
- 開放圖查詢語言:支援屬性圖模型,高度相容Gremlin圖查詢語言
- 服務高可用:支援高可用執行個體,節點故障迅速轉移,保障業務連續性
- 高度優化的自研引擎:高度優化的自研圖計算層和存儲層,雲盤多副本保障資料超高可靠,支援ACID事務
- 易運維:提供備份恢複,自動更新,監控告警,故障切換等豐富的運維功能,大幅降低運維成本
開放圖查詢語言
阿裡雲圖資料庫GDB支援屬性圖模型,公測版對外開放
Apache TinkerPop Gremlin圖查詢語言。
Gremlin是一由Apache TinkerPop提供支援的圖查詢語言,License為開源的Apache License Version 2.0。Gremlin和傳統SQL有明顯差別,是一種函數式、面向資料流的查詢語言,使使用者可以更為直接地控制和表達圖查詢的複雜邏輯。Gremlin包含一個寬松的DSL規範描述,以及基于Java/Groovy的開源實作。
阿裡雲圖資料庫GDB實作了Gremlin的高度相容,支援直接使用開源的3.3.3版本以3.4版本開源用戶端連接配接GDB進行操作,具體包括Gremlin Console,Java SDK,Python SDK,.Net SDK,并且支援Rest接口。如果希望進一步了解具體相容性,可以參考:
GDB Gremlin實作的相容性服務高可用
圖資料庫GDB公測版本支援高可用執行個體,後續商業化将進一步開放一寫多讀執行個體,提供讀執行個體的水準擴充能力。
高可用版本采用一主一備的經典高可用架構,主備都采用獨立的圖資料庫節點,計算與存儲分離,主備之間通過複制(預設半同步)實作資料同步,一旦主庫發生故障,将迅速檢測并觸發主備切換來保證可用性。備庫故障對業務無影響,但會快速被檢測到并觸發備庫自愈。未來提供一寫多讀執行個體後,所有讀寫執行個體将共享底層存儲資源(3副本),提升擴充性的同時也将帶來整體存儲成本的進一步降低。
高度優化的自研引擎
圖資料庫GDB由阿裡雲自主研發,是一款高度優化的Cloud-Native圖資料庫,雖然歸屬No-SQL資料庫分類,但提供了完整的ACID事務支援。在上雲之前,圖資料庫GDB在阿裡巴巴已經有大量内部客戶使用。圖核心經曆過多個版本深度打磨,同時針對雲環境進行了大量調優。GDB公測版本基于雲盤建構,雲盤多副本提供了資料超高可靠保障。
下圖是GDB核心部分核心能力示意:
整體上,圖資料庫核心包含計算和存儲兩層,計算層專注在圖相關能力抽象及實作,存儲層專注在資料的内部布局及高效存取。下面将對GDB核心的部分核心能力進行進一步解析:
- Gremlin Runtime: 實作了Gremlin DSL的高效解析及執行計劃的生成。同時為保障DSL的安全執行,内部實作了一層沙箱來做安全防護。
- Cost-Based Optimizer: 通過完整的資訊統計和代價估算,以CBO(Cost-Based Optimizer)為主體,輔以部分RBO(Rule-Based Optimizer),來對執行方案進行優化。
- Parallel Query Execution: 目前主要采用了基于Morsel機制的并行執行, 同時也在基于場景不斷探索和驗證更有效的并行執行方案。
- Read Committed Isolation Level: GDB提供了一種自動事務機制,針對每一條DSL都會自動生成一個事務并在執行結束時基于結果送出或者終止。公測版本目前預設為Read-Committed隔離級别,更多的隔離級别将在未來開放并提供入口讓使用者自行權衡設定。
- Fine-Grained Locking: GDB内部針對讀,寫,讀寫混合各類請求進行了細緻劃分,結合隔離級别,對鎖進行了非常細粒度的管理。
- Smart Cache: GDB内部實作了兩層Cache,包括Object Cache及Block Cache,同時會基于使用者的請求特征自行調整Cache政策。
- High Performance Transaction Mechanism: 一個複雜DSL本質對應的是一個複雜的父事務,在執行優化後将會被拆解成多個子事務來執行,GDB内部實作了一套非常高效的事務裝置,能夠在保證事務正确性的同時提供最大的并發性。
- Schema-Agnostic Indexing: GDB采用Schema-free的設計,支援自動索引,使用者無需面對繁雜的索引管理和優化相關事情,隻需專注在業務自身的實作即可。
- Highly-Tuned Storage Engine: GDB基于圖結構的特點設計了全新的存儲方案,同時基于雲盤等雲上環境進行了大量針對性調優。
- High Reliability: GDB采用雲盤作為存儲,每份資料3副本,配合高可用設計,能夠最大程度的保證資料的可靠性。
易運維
除核心圖資料庫服務能力外,GDB為使用者提供了大量運維配套能力。包括備份恢複,自動更新,監控告警,故障切換等,可以幫助使用者大幅降低運維成本。
圖資料庫GDB未來演進
圖資料庫GDB還在迅速的演進和完善當中,不久的未來,我們會提供:
- 更強大的備份恢複能力
- 更強大的彈性及水準擴充能力
- 豐富的資料遷移工具
- 完善的資料管理工具(可視化,性能診斷,審計等)
- 常見的圖算法
我們也會進一步在各個層面對圖資料庫的生态進行完善,包括提供相關工具或環境讓使用者能夠便利的對接到業界流行的的一些圖相關系統,比如可視化系統,分析系統等。
寫在最後
圖資料庫GDB是阿裡雲資料庫家族為覆寫更全面企業場景而重磅推出的最新力作,擁有很多優秀的特性。目前圖資料庫GDB已經正式公測釋出,
https://www.aliyun.com/product/gdb,歡迎體驗和回報!