10分鐘上手圖數據庫Neo4j

隨着互聯網不斷的發展,傳統的關係型數據庫如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年。瀏覽器

Neo4j數據庫的優點
  • 在建立節點的時候就已經把關係給創建起來,避免了在複雜查詢場景下的處理
  • 因爲底層直接以圖的形式存儲節點和關係,在查詢的時候可使時間複雜度保持在常數級別。
  • 基於JVM實現
  • 提供一套易於理解的查詢語言Cypher以及內置的可視化UI
  • 很好的支持ACID,有事務機制
Neo4j安裝及實踐

爲了方便你們搭建環境,本文仍是會用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經常使用使用場景
  • 社交網絡
  • 基於圖的搜索
  • 推薦引擎
  • 企業基礎設施及網絡架構
  • 等等等
結語:

本文簡單扼要的介紹了Neo4j這個比較小衆的數據庫的概念和使用方法,相信在這個數據爲王的時代,圖數據庫能夠從其它各種數據庫中脫穎而出,得到一席之地。

做者:BlairWaldorf連接:https://www.jianshu.com/p/97c6752e928b來源:簡書

相關文章
相關標籤/搜索