圖數據庫簡介
? 圖數據庫(Graph Database)是基于圖論實現的一種新型NoSQL數據庫。它的數據存儲結構和數據的查詢方式都是以圖論為基礎的。圖論中圖的基本元素為節點和邊,在圖數據庫中對應的就是節點和關系。
? 在圖數據庫中,數據與數據之間的關系通過節點和邊構成一個圖結構并在此結構上實現數據庫的所有特性,如對圖數據對象進行創建、讀取、更新、刪除(Create、Read、Update、Delete,簡稱:CRUD)等操作的能力,還有處理事務的能力和高可用性等。
目前市面上較為流行的圖數據庫產品有以下幾種:
實時圖數據排名及增長趨勢圖如下:
圖數據庫中的關系查詢示意圖:
neo4j簡介
? Neo4j是由Java和Scala實現的開源NoSQL圖數據庫。自2003年開始研發,直到2007年正式發布第一版。Neo4j的源代碼托管在GitHub上,技術支持托管在Stack Overflow和Neo4j Google討論組上。Neo4j現如今已經被各種行業的數十萬家公司和組織采用。Neo4j的使用案例涵蓋了包括網絡管理、軟件分析、科學研究、路由分析、組織和項目管理、決策制定、社交網絡等。
官方網站:https://neo4j.com
Github: https://github.com/neo4j/neo4j
Example: https://github.com/neo4j-examples
Neo4j的特點
- SQL一樣容易查詢語言的Neo4j CQL。
- 它遵循屬性圖數據模型。
- 它通過使用Apache Lucence支持索引。
- 它支持UNIQUE約束。
- 它包含一個UI執行CQL指令:Neo4j的數據瀏覽器。
- 它支持完整的ACID(原子性,一致性,隔離性和持久性)規則。
- 它采用原生圖形庫與本地GPE(圖形處理引擎)。
- 它支持查詢的數據導出到JSON和XLS格式。
- 它提供了REST API由如Java,python等編程語言進行訪問。
- 它提供了Java Script支持以任何UI MVC框架如Node JS進行訪問。
- 它支持兩種類型的Java API:Cypher支架API和本地Java API來開發Java應用程序。
Neo4j優勢
? neo4j不管是與關系型數據庫相比,還是與其他NoSQL數據庫相比,都具有很多前所未有的優勢,這可以從以下幾個方面來分析,主要表現為查詢的高性能、設計的靈活性和開發的敏捷性等。<本段內容選自<Neo4j全棧開發>>
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)閃電般的讀/寫速度,無與倫比的高性能表現。
?。?)非結構化數據存儲方式,在數據庫設計上具有很大的靈活性。
?。?)能很好地適應需求變化,并適合使用敏捷開發方法。
?。?)很容易使用,可以用嵌入式、服務器模式、分布式模式等方式來使用數據庫。
?。?)使用簡單框圖就可以設計數據模型,方便建模。
?。?)圖數據的結構特點可以提供更多更優秀的算法設計。
?。?)完全支持ACID完整的事務管理特性。
?。?)提供分布式高可用模式,可以支持大規模的數據增長。
?。?)數據庫安全可靠,可以實時備份數據,很方便恢復數據。
(10)圖的數據結構直觀而形象地表現了現實世界的應用場景。