上期已經安裝了圖數據庫,本期就該討論到底這個圖數據庫裏面的一些基本的概念和如何操作。最近聽到一句話,年輕不年輕,不是看年齡,而是看你對新鮮事物的熱情,即使你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