隨着互聯網不斷的發展,傳統的關係型數據庫如oracle,mysql已經難以支撐現下大數據量,高併發的場景了。因而,NoSQL橫空出世,有像cassandra這樣的column-based,像MongoDB這樣document-based。今天在這裏獵奇的是一個graph-based的數據庫,Neo4j。css
圖數據庫名字的由來其實與其在底層的存儲方式有關,Neo4j底層會以圖的方式把用戶定義的節點以及關係存儲起來,經過這種方式,但是高效的實現從某個節點開始,經過節點與節點間關係,找出兩個節點間的聯繫。mysql
從這段描述中能夠猜獲得,在Neo4j中最重要的兩個元素就是節點和關係。說到節點和關係,就必須引出一個很是重要的概念,屬性圖模型(Property Graph Model)。以下所示:sql
接下來用一個實際的例子來解釋下這個模型,最近在虎撲上被吹捧的特別厲害的恩比德大帝曾經爆出過他本身PS的一張圖,隔空示愛蕾哈娜,參考下圖docker
咱們嘗試用Property Graph Model來表示這樣的一個關係。數據庫
上圖中定義了兩個節點,恩比德和蕾哈娜,類別分別是球員和歌手,分別擁有身高,國籍以及生日,血型屬性。兩個節點之間經過一個「喜歡」關係關聯,「喜歡」關係擁有本身的一個屬性「自從」,屬性值爲2014年。瀏覽器
爲了方便你們搭建環境,本文仍是會用Docker來運行一個包含Neo4j的容器,Docker下載安裝參考這裏。在下文中會根據以前引用的恩比德大帝的例子來介紹Cypher語句。bash
從Docker Hub上pull一個Neo4j的鏡像網絡
docker pull neo4j
啓動一個Neo4j的容器, 須要在你的Home目錄下創建一個/neo4j/data文件夾架構
docker run --publish=7474:7474 --publish=7687:7687 --volume=$HOME/neo4j/data:/data neo4j
在瀏覽器中訪問loalhost:7474能夠看到以下的UI界面,輸入默認用戶名和密碼neo4j便可鏈接到neo4j數據庫。併發
建立一個球員節點恩比德
CREATE (embiid: PLAYER {name: 'Embiid', height: '2.13m', nationality: 'Cameroon'})
能夠經過點擊Neo4j左邊的側邊欄中的PLAYER標籤看到剛纔新建的節點。
建立歌手蕾哈娜節點以及「喜歡」關係
MATCH (embiid:PLAYER{name:'Embiid'}) MERGE (embiid)-[:LIKES{since:'2014'}]->(Rihanna: SINGER{name:'Rihanna', dob:'1988/2/20',bloodType:'O'})
建立完之後UI以下圖所示,圖中能夠看出新建的蕾哈娜節點和以前的恩比德節點經過LIKES關係關聯了起來
查詢返回全部喜歡蕾哈娜的PLAYER節點
MATCH(p:PLAYER)-[:LIKES]->(:SINGER{name:'Rihanna'}) RETURN p;
本文簡單扼要的介紹了Neo4j這個比較小衆的數據庫的概念和使用方法,相信在這個數據爲王的時代,圖數據庫能夠從其它各種數據庫中脫穎而出,得到一席之地。
做者:BlairWaldorf連接:https://www.jianshu.com/p/97c6752e928b來源:簡書