聊聊Neo4j圖數據庫的那些明顯優勢

Neo4J NoSQL 數據結構 算法設計 海同職座標 2017-06-13

引言:Neo4j是一個NoSQL的圖數據庫管理系統,像其他NoSQL數據庫一樣具有高效的查詢性能。同時,Neo4j還具有完全事務管理特性,完全支持ACID事務管理。Neo4j與其他數據庫相比,具有哪些明顯的優勢呢?

本文選自《Neo4j全棧開發》。

聊聊Neo4j圖數據庫的那些明顯優勢

在高速發展的互聯網應用中,業務需求的頻繁變更和數據的快速增長都要求數據庫必須具有很強的適應能力。Neo4j圖數據庫正是一個能夠適應這種業務需求不斷變化和大規模數據增長而產生的數據庫,它不但具有很強的適應能力,而且能夠自始至終保持高效的查詢性能。

現實世界中的一切事物都處在聯繫之中,如人際關係、電腦網絡、地理數據、分子結構模型等,無一不處在紛繁複雜的聯繫之中。這種聯繫形成了一種互相關聯的數據,聯繫才是數據的本質所在。傳統的關係型數據庫並不能很好地表現數據的聯繫,而一些NoSQL(Not Only SQL,非關係型數據庫)數據庫又不能表現數據之間的聯繫。同樣是NoSQL的Neo4j圖數據庫是以圖的結構形式來存儲數據的,它所存儲的就是聯繫的數據,是關聯數據本身。

關聯數據中的聯繫本來就很複雜,若要在關係型數據庫中使用結構化形式來表現這種聯繫,則一般不能直接表示,處理起來既煩瑣又費事,並且隨著數據的不斷增長,其訪問性能將日趨下降。無數的開發人員和數據庫管理人員都或多或少地使用過關係型數據庫,在其應用的規模化進展過程中,對於數據庫的性能優化往往捉襟見肘、陷入窘境。Neo4j沒有模式結構的定義,也不需要這些定義,它使用非結構化的方式來存儲關聯數據,所以能夠直接表現數據的關聯特性。

Neo4j不管是與關係型數據庫相比,還是與其他NoSQL數據庫相比,都具有很多前所未有的優勢,這可以從以下幾個方面來分析,主要表現為查詢的高性能、設計的靈活性和開發的敏捷性等。

1 高性能表現

Neo4j是一個原生的圖數據庫引擎,它存儲了原生的圖數據,因此,可以使用圖結構的自然伸展特性來設計免索引鄰近節點遍歷的查詢算法,即圖的遍歷算法設計。圖的遍歷是圖數據結構所具有的獨特算法,即從一個節點開始,根據其連接的關係,可以快速和方便地找出它的鄰近節點。這種查找數據的方法並不受數據量的大小所影響,因為鄰近查詢始終查找的是有限的局部數據,不會對整個數據庫進行搜索。所以,Neo4j具有非常高效的查詢性能,相比於RDBMS可以提高數倍乃至數十倍的查詢速度。而且查詢速度不會因數據量的增長而下降,即數據庫可以經久耐用,並且始終保持最初的活力。不像RDBMS那樣,因為不可避免地使用了一些範式設計,所以在查詢時如果需要表示一些複雜的關係,勢必會構造很多連接,從而形成很多複雜的運算。並且在查詢中更加可怕的是還會涉及大量數據,這些數據大多數與結果毫無關係,有的可能僅僅是通過ID查找它的名稱而已,所以隨著數據量的增長,即使查詢一小部分數據,查詢也會變得越來越慢,性能日趨下降,以至於讓人無法忍受。

2 設計的靈活性

在日新月異的互聯網應用中,業務需求會隨著時間和條件的改變而發生變化,這對於以往使用結構化數據的系統來說,往往很難適應這種變化的需要。圖數據結構的自然伸展特性及其非結構化的數據格式,讓Neo4j的數據庫設計可以具有很大的伸縮性和靈活性。因為隨著需求的變化而增加的節點、關係及其屬性並不會影響到原來數據的正常使用,所以使用Neo4j來設計數據庫,可以更接近業務需求的變化,可以更快地趕上需求發展變化的腳步。

大多數使用關係型數據庫的系統,為了應對快速變化的業務需求,往往需要採取推倒重來的方法重構整個應用系統。而這樣做的成本是巨大的。使用Neo4j可以最大限度地避免這種情況發生。雖然有時候,也許是因為最初的設計考慮得太不周全,或者為了獲得更好的表現力,數據庫變更和遷移在所難免,但是使用Neo4j來做這項工作也是非常容易的,至少它沒有模式結構定義方面的苦惱。

3 開發的敏捷性

圖數據庫設計中直觀明瞭的數據模型,從需求的討論開始,到程序開發和實現,以及最終保存在數據庫中的樣子,它的模樣似乎沒有什麼變化,甚至可以說本來就是一模一樣的。這說明,業務需求與系統設計之間可以拉近距離,需求和實現結果之間越來越接近。這不但降低了業務人員與設計人員之間的溝通成本,也使得開發更加容易迭代,並且非常適合使用敏捷開發方法。

Neo4j本身可伸縮的設計靈活性,以及直觀明瞭的數據模型設計,還有其自身簡單易用的特點等,所有這些優勢充分說明,使用Neo4j很適合以一種測試驅動的方法應用於系統設計和開發自始至終的過程之中,通過迭代來加深對需求的理解,並通過迭代來完善數據模型設計。

4 與其他數據庫的比較

與當前一些主流的數據庫相比,不管是傳統的關係型數據庫,還是NoSQL數據庫,或者同類的圖數據庫,Neo4j都是出類拔萃的。

在傳統的RDBMS中,如果要表現一個部門的用戶,即1.2節提到的例子,按照第三範式的設計要求,至少需要三張表格來表示,即部門表、用戶表和部門-用戶關係表,這樣實體和關係就被人為地隔開了,它們是完全分離的,存在於不同的表中,這就給查詢帶來了一定的難度,從而影響了查詢的性能。而Neo4j所表現的是實體的聯繫本身,它表現了現實世界中事物聯繫的本質,它的聯繫在節點創建時就已經建立,所以在查詢中能以快捷的路徑返回關聯數據,從而表現出非常高效的查詢性能。

Key-Value的數據庫雖然能提供高性能的查詢,但它所能表示的內容是有限的。實際上,Neo4j節點的屬性就是一些Key-Value的數據集合。而Neo4j通過節點和關係的屬性可以表現更為豐富多彩的內容,這是其他Key-Value的數據庫所無法比擬的。

對於Key-Document文檔數據庫來說,相對於Key-Value數據庫,內容是豐富了些,但美中不足的是,一個文檔經不起內容的變更或修改。如果用Neo4j的節點及其屬性來表示,則處理這種類似的變更卻是輕而易舉的。

在圖數據庫領域,除Neo4j之外,還有其他如OrientDB、Giraph、AllegroGraph等各種圖數據庫。跟所有這些圖數據庫相比,Neo4j的優勢表現在以下兩個方面。

(1)Neo4j是一個原生圖計算引擎,它存儲和使用的數據自始至終都是使用原生的圖結構數據進行處理的,不像有些圖數據庫,只是在計算處理時使用了圖結構數據,而在存儲時還將數據保存在關係型數據庫中。

(2)Neo4j是一個開源的數據庫,其開源的社區版吸引了眾多第三方的使用和推廣,如開源項目Spring Data Neo4j就是一個做得很不錯的例子,同時也得到了更多開發者的擁躉和支持,聚集了豐富的可供交流和學習的資源與案例。這些支持、推廣和大量的使用,反過來會很好地推動Neo4j的發展。

5 綜合表現

Neo4j查詢的高性能表現、易於使用的特性及其設計的靈活性和開發的敏捷性,以及堅如磐石般的事務管理特性等特點,都充分說明了使用Neo4j是一個不錯的選擇。有關它的所有優點,總結起來,主要表現在以下幾個方面。

(1)閃電般的讀/寫速度,無與倫比的高性能表現。

(2)非結構化數據存儲方式,在數據庫設計上具有很大的靈活性。

(3)能很好地適應需求變化,並適合使用敏捷開發方法。

(4)很容易使用,可以用嵌入式、服務器模式、分佈式模式等方式來使用數據庫。

(5)使用簡單框圖就可以設計數據模型,方便建模。

(6)圖數據的結構特點可以提供更多更優秀的算法設計。

(7)完全支持ACID完整的事務管理特性。

(8)提供分佈式高可用模式,可以支持大規模的數據增長。

(9)數據庫安全可靠,可以實時備份數據,很方便恢復數據。

(10)圖的數據結構直觀而形象地表現了現實世界的應用場景。

本文選自《Neo4j全棧開發》。

相關推薦

推薦中...