10分鐘上手圖數(shù)據(jù)庫Neo4j

隨著互聯(lián)網(wǎng)不斷的發(fā)展园爷,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫如oracle宠蚂,mysql已經(jīng)難以支撐現(xiàn)下大數(shù)據(jù)量,高并發(fā)的場景了童社。于是求厕,NoSQL橫空出世,有像cassandra這樣的column-based叠洗,像MongoDB這樣document-based甘改。今天在這里獵奇的是一個graph-based的數(shù)據(jù)庫,Neo4j灭抑。

什么是圖數(shù)據(jù)庫

圖數(shù)據(jù)庫名字的由來其實與其在底層的存儲方式有關(guān)十艾,Neo4j底層會以圖的方式把用戶定義的節(jié)點以及關(guān)系存儲起來,通過這種方式腾节,可是高效的實現(xiàn)從某個節(jié)點開始忘嫉,通過節(jié)點與節(jié)點間關(guān)系,找出兩個節(jié)點間的聯(lián)系案腺。

從這段描述中可以猜得到庆冕,在Neo4j中最重要的兩個元素就是節(jié)點和關(guān)系。說到節(jié)點和關(guān)系劈榨,就必須引出一個非常重要的概念访递,屬性圖模型(Property Graph Model)。如下所示:

  • 一個圖中會記錄節(jié)點和關(guān)系
  • 關(guān)系可以用來關(guān)聯(lián)兩個節(jié)點
  • 節(jié)點和關(guān)系都可以擁有自己的屬性
  • 可以賦予節(jié)點多個標簽(類別)

接下來用一個實際的例子來解釋下這個模型同辣,最近在虎撲上被吹捧的特別厲害的恩比德大帝曾經(jīng)爆出過他自己PS的一張圖拷姿,隔空示愛蕾哈娜,參考下圖


我們嘗試用Property Graph Model來表示這樣的一個關(guān)系旱函。

上圖中定義了兩個節(jié)點响巢,恩比德和蕾哈娜,類別分別是球員和歌手棒妨,分別擁有身高踪古,國籍以及生日,血型屬性。兩個節(jié)點之間通過一個“喜歡”關(guān)系關(guān)聯(lián)伏穆,“喜歡”關(guān)系擁有自己的一個屬性“自從”拘泞,屬性值為2014年。

Neo4j數(shù)據(jù)庫的優(yōu)勢
  • 在創(chuàng)建節(jié)點的時候就已經(jīng)把關(guān)系給建立起來蜈出,避免了在復雜查詢場景下的處理
  • 由于底層直接以圖的形式存儲節(jié)點和關(guān)系田弥,在查詢的時候可以使時間復雜度保持在常數(shù)級別。
  • 基于JVM實現(xiàn)
  • 提供一套易于理解的查詢語言Cypher以及內(nèi)置的可視化UI
  • 很好的支持ACID铡原,有事務機制
Neo4j安裝及實踐

為了方便大家搭建環(huán)境偷厦,本文還是會用Docker來運行一個包含Neo4j的容器,Docker下載安裝參考這里燕刻。在下文中會根據(jù)之前引用的恩比德大帝的例子來介紹Cypher語句只泼。

從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數(shù)據(jù)庫卵洗。

創(chuàng)建一個球員節(jié)點恩比德

CREATE (embiid: PLAYER {name: 'Embiid', height: '2.13m', nationality: 'Cameroon'}) 

可以通過點擊Neo4j左邊的側(cè)邊欄中的PLAYER標簽看到剛才新建的節(jié)點请唱。

創(chuàng)建歌手蕾哈娜節(jié)點以及“喜歡”關(guān)系

MATCH (embiid:PLAYER{name:'Embiid'})
MERGE (embiid)-[:LIKES{since:'2014'}]->(Rihanna: SINGER{name:'Rihanna', dob:'1988/2/20',bloodType:'O'})

創(chuàng)建完以后UI如下圖所示,圖中可以看出新建的蕾哈娜節(jié)點和之前的恩比德節(jié)點通過LIKES關(guān)系關(guān)聯(lián)了起來

查詢返回所有喜歡蕾哈娜的PLAYER節(jié)點

MATCH(p:PLAYER)-[:LIKES]->(:SINGER{name:'Rihanna'})
RETURN p;
Neo4j常用使用場景
  • 社交網(wǎng)絡(luò)
  • 基于圖的搜索
  • 推薦引擎
  • 企業(yè)基礎(chǔ)設(shè)施及網(wǎng)絡(luò)架構(gòu)
  • 等等等
結(jié)語:

本文簡單扼要的介紹了Neo4j這個比較小眾的數(shù)據(jù)庫的概念和使用方法过蹂,相信在這個數(shù)據(jù)為王的時代十绑,圖數(shù)據(jù)庫可以從其它各類數(shù)據(jù)庫中脫穎而出,獲得一席之地酷勺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本橙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脆诉,更是在濱河造成了極大的恐慌甚亭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件击胜,死亡現(xiàn)場離奇詭異亏狰,居然都是意外死亡,警方通過查閱死者的電腦和手機偶摔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門暇唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辰斋,你說我怎么就攤上這事信不。” “怎么了亡呵?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長硫戈。 經(jīng)常有香客問我锰什,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任汁胆,我火速辦了婚禮梭姓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫩码。我一直安慰自己誉尖,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布铸题。 她就那樣靜靜地躺著铡恕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丢间。 梳的紋絲不亂的頭發(fā)上探熔,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音烘挫,去河邊找鬼诀艰。 笑死,一個胖子當著我的面吹牛饮六,可吹牛的內(nèi)容都是我干的其垄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼卤橄,長吁一口氣:“原來是場噩夢啊……” “哼绿满!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虽风,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤棒口,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辜膝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體无牵,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年厂抖,在試婚紗的時候發(fā)現(xiàn)自己被綠了茎毁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡忱辅,死狀恐怖七蜘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墙懂,我是刑警寧澤橡卤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站损搬,受9級特大地震影響碧库,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嵌灰,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沽瞭。 院中可真熱鬧迁匠,春花似錦驹溃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傍药。三九已至磺平,卻和暖如春拐辽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俱诸。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工菠劝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睁搭。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓赶诊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親园骆。 傳聞我的和親對象是個殘疾皇子舔痪,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容