天天看點

什麼是Neo4J? | 帶你讀《SpringBoot實戰教程》之三十

上一篇:SpringBoot實作批量檔案上傳 | 帶你讀《SpringBoot實戰教程》之二十九 下一篇:SpringBoot如何整合Neo4j? | 帶你讀《SpringBoot實戰教程》之三十一

本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程《SpringBoot實戰教程》,主講人楊紅豔,

點選檢視視訊内容

Neo4J介紹及安裝

Neo4j是一個高性能的,NOSQL圖形資料庫,它是一個嵌入式的、基于磁盤的、具備完全的事務特性的Java持久化引擎,但是它将結構化資料存儲在網絡(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎,該引擎具有成熟資料庫的所有特性。

這種資料庫與傳統的關系型資料庫有很大的差别。為了更好地幫助大家了解,來将關系型資料庫與圖形資料庫作個比較。

關系型資料庫:

我們常用的像mysql,oracle等都是關系型資料庫,在關系型資料庫裡面對資料的處理是這樣子的:對每個對象都建立一個表,對象的屬性對應表裡面的列

什麼是Neo4J? | 帶你讀《SpringBoot實戰教程》之三十

如圖所示。在資料庫裡有條資料表示兩個對象:tim,lili。在現實生活中我們會發現任何對象都是有某種聯系的,那麼關系型資料庫裡是怎樣來表示這種關系呢?就比如tim和lili是好朋友,那麼在資料庫裡怎樣來表示他們的關系呢?關系型資料庫裡面是 這樣處理的——建立一個叫relationship的表,表裡面有兩個字段id,friendid。

什麼是Neo4J? | 帶你讀《SpringBoot實戰教程》之三十

如圖所示。如果我們要查找tim的朋友那麼我們可以周遊relationship表就可以了。

這種資料模型會有什麼問題呢?其實我們可以對這個資料模型提個問題——tim的朋友的朋友的朋友的朋友是誰?關系型資料會這樣回答你的問題:首先在relationship表裡面找到所有id為1(tim的id)的資料,然後拿到對應的friendid,接着逐個根據friendid再進行周遊找到對應的friendid,如此反複地周遊查詢......

也許10分鐘也許一小時,也許它永遠都無法回答你的問題。

其實,這種關系隻要超過5級關系型資料庫就無法解決問題,這就是為什麼需要圖形資料庫的出現了。

圖形資料庫:

在圖形資料庫裡面對資料的處理是這樣子的:每個對象都表示成為一個節點(node),每個節點之間的聯系表示成關系(relationship),節點與節點之間用關系關聯在一起。我們可以看圖更好了解一點。

什麼是Neo4J? | 帶你讀《SpringBoot實戰教程》之三十

如圖所示,有三個節點(node)它們都通過FRIEND關系(relationship)關聯起來。Tim的朋友是lili,lili跟jack互為朋友,同時jack認識tim。在圖形資料庫裡要回答像“tim的朋友的朋友的朋友”的問題非常簡單,資料庫隻需要找到tim的關系(relationship)所對應的節點然後找到對應節點的關系(relationship),隻需周遊幾次,這樣就可以很容易回答了上面的問題了。

安裝

1、

官網

下載下傳windows環境下的安裝包

2、解壓,比如目錄為E:neo4j

3、設定環境變量

變量名:NEO4J_HOME

變量值:E:neo4j

再修改變量path,增加%NEO4J_HOME%bin

4、檢視并編輯配置參數

%NEO4J_HOME%confneo4j.conf

5、啟動

在DOS指令行視窗,執行:neo4j.bat console

什麼是Neo4J? | 帶你讀《SpringBoot實戰教程》之三十

出現此界面,證明可以正常啟動。

6、 打開neo4j內建的浏覽器

http://localhost:7474/

第一次打開需要登入。預設的登入名和密碼都是:neo4j

什麼是Neo4J? | 帶你讀《SpringBoot實戰教程》之三十

使用Cypher語言:Cypher是專門為圖像資料庫設計的語言,它淺顯易懂。舉個例子,假如要建立這麼一個資料模型——好友A與好友B是朋友關系,好友B與C也是朋友關系,好友A認識C但C不認識A——這樣的資料模型用Cypher描述如下:

create (A:Person{name:'jack'})-[:Friend]->(B:Person {name:'tom'})-[:Friend]->(C:Person {name:'lucy'}), (A)-[:Know]->(C)           

(注:()裡面的是節點,[]裡面的是關系,{}裡的是屬性, >表示關系的方向)

要查詢A的一個名叫”tom”的朋友:

match (a)-[:Friend]->(b)
where b.name='tom'
return b           

配套視訊