NEO4J 圖數據庫哪裏和哪裏 從哪裏開始

上期已經安裝了圖數據庫,本期就該討論到底這個圖數據庫裏面的一些基本的概念和如何操作。最近聽到一句話,年輕不年輕,不是看年齡,而是看你對新鮮事物的熱情,即使你20歲,談起新事物也是一臉的不屑,只能說明身體和靈魂分了家。閒話不談 迴歸正題。

節點和節點之間可以存在多種關係,單向,雙向

上圖是一個人際關係圖,其中的每個人的關係是凌亂的,一個人對另外的幾個人之間的角色也是不同的,這裏NEO4J 通過 lable 來定位一個節點(方塊位置)在整體中的扮演的角色,例如這張圖中“某公司的客戶”,就是定義這羣人在這個圖中的角色,都是某公司的客戶。用這樣的概念可以將這些人,進行一個一致性的分類。

理解NEO4J 中的關鍵的幾個屬性:

1 節點:下圖中每個方塊可以看做一個節點

2 屬性:每個節點有多個屬性,以 KEY VALUE 的形式來進行描述

3 關係: 節點和節點之間的關係,也是通過key value的方式來存儲,同時節點和節點的關係不唯一,可以雙向

4 標籤:標籤就是這組節點的共性,例如都是某公司的職員,或者搖身一變都是一個城市的市民 ,標籤是標記每個節點之間的相同點

個人淺薄的理解

1 節點,可以理解爲傳統數據的行的概念

2 關係:就是表和表之間 join 的概念  (這也是比傳統數據庫高明的地方,其實還是空間換了時間),關係本身也是帶有方向和屬性的,這也是傳統數據庫本身做不到的地方

3 屬性:理解爲一個MONGODB 裏面的document,一個節點會有多種屬性

4 標籤:理解爲mongodb裏面的collection 或者 傳統數據庫中的表,但一個節點可以屬於多個表,這個又超越了傳統數據庫的理解的理念。

圖數據庫是什麼個人總結一下,一個通過key value來存儲數據,並且在在查詢前就建立了JOIN關係的,數據字段屬於多個表的 weirdo” 出現了。

實際上在安裝完neo4j 本身他就擁有自己的exmaple 的指導

在輸入 :play movie graph 後,你可以看到上圖從如何創建,一個實例的圖,找尋數據,查詢數據等等這些操作

點擊箭頭,可以將要執行的sample movie 庫,在執行框中執行,執行後結果如下。


下面貼部分代碼,並輔以解釋,加速學習進度


1 建立節點和屬性
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})

上面兩句話創建了三個節點,

1 TheMatrix 

2 Keanu

3 Carrie

這三個節點具有兩個lable 也就是這三個節點目前屬於兩個表

1 Movie

2 Person

而這三個節點, {} 中的信息是代表這個節點的屬性,也就是這個節點的內部信息,相當於字段以key value 形式表達,或直接理解爲 mongodb的部分知識

所以建立節點需要幾個信息,1 節點本身,2 節點屬於哪個lable 3 節點本身的屬性信息, 下面就開始創建相關的關係,也就是節點和節點之間愛你的關係

CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix)

首先上面這句話的意思是(翻譯成人類能看懂的文字)

1 keanu 作爲一個演員在TheMatrix電影裏面扮演了 Neo這個角色,同時

Carrie在TheMatrix 這個電影裏面扮演了Trinity 這個角色,Laurence 在TheMatrix 電影裏面扮演Morpheus角色,Hugo在TheMatrix 扮演Agent Smith 角色,LillyW LanaW Joels 導演了TheMatrix 這部電影。

通過這一個語句,將六個人與這部電影的關係描述清楚。

在能讀懂一些簡單的創建節點和關係的語句後,我們來一邊創建創建節點,一邊查詢節點,加快理解的速度

CREATE (TomH:Person {name:'Tom Hanks', born:1956})

創建一個節點 TomH ,然後查詢這個節點通過節點的屬性

如果不理解,這裏通過傳統的數據庫來翻譯一下

select tom from Person where name = 'Tom Hanks';

CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})

創建一個MOVIE的節點,叫CloudAtlas ,並且相關的電影的title, released, tagline 等字段的內容

查詢 tilte 等於 Cloud Atlas 返回節點本身

select  CloudAtlas from Movie WHERE title = 'Cloud Atlas'

下面這張圖的意思是 查找tom hanks 到底演過幾部電影

當然寫到這裏我也是納悶了兩天 tom 和 tomHanksMovies 我根本就沒有在任何地方輸入過這些信息到NEO4J中,到底他們是怎麼展示的這些信息,在經過琢磨後,照貓畫虎的寫出了下面查詢Keanu 到底演過什麼電影的查詢語句。同樣 K,Kmovies 我都沒有輸入過,到底是怎麼回事???

See you next time

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章