NoSQL
1. NoSQL 介紹
- NoSQL(Not-Only SQL),泛指非關係型的數據庫,它可以作爲關係型數據庫的良好補充。
- 關係型數據庫與非關係型數據庫的比較:
- 互聯網產品的特點:高併發、高可用、高性能、海量數據。傳統的關係型數據庫出現了性能和擴展的瓶頸,所以非關係型數據庫應時而生,解決了互聯網產品的三高和海量數據的問題。
- NoSQL 和關係型的數據庫是互補關係,在各自的應用場景中都有自己的特點,一般情況下我們使用關係型數據庫持久化數據(處理複雜的業務場景),對一些熱點數據通過 NoSQL 來作爲緩存提高效率。
2. NoSQL 的主流產品
分類 | 特點 | 代表產品 |
---|---|---|
鍵值存儲(Key-Value-stores) | 數據一般存在內存中,讀寫速度快(10w/s),適合作爲緩存服務 | Redis |
文檔型數據庫(Document-stores) | 數據結構要求不嚴格,適合存儲結構不確定或者價值較低的數據 | MongDB |
列存儲數據庫(BigTable-implementations) | 查找速度快,更容易進行分佈式擴展,適合作爲文件存儲服務 | Hbase |
圖形數據庫(Graph Database) | 使用“圖結構”進行存儲,適合做社交網絡計算等等 | Neo4j |
3. 圖形數據庫
a. 圖形數據庫介紹
- 在 NoSQL 四種分類中,圖數據庫從最近十年的表現來看已經成爲關注度最高,也是發展趨勢最明顯的數據庫類型。下圖就是 db-engines.com 對圖形數據庫發展趨勢的分析結果:
b. 二度人脈的概念
- 如果把你的微信好友作爲一度人脈的話,那麼你微信好友的好友就屬於你的二度人脈,而你微信好友的好友的好友就是你的三度人脈,畫個圖簡單看一下:
- 通常情況下我們所指的二度人脈基本都是一個泛指,泛指除了一度人脈之外的所有關聯的人脈關係,如:三度、四度、五度甚至六度人脈等。那麼應該如何實現推薦二度人脈這個功能呢?
- 運用關係型數據庫,可以很輕鬆的實現一個推薦二度人脈的數據庫表設計和代碼實現。數據庫首先有一個用戶表 user,用於表示用戶的基本信息,然後一個有一個好友表 user_friends,用於表示好友之間的關係。查找你的一度人脈就是直接根據你的用戶 ID 到 user_friends 表中查找好友的 ID;查找你的二度人脈是先根據你的用戶 ID 去 user_friends 表中先查出來你的一度人脈,然後得到所有一度人脈的用戶 ID,然後根據這些所有一度人脈的用戶 ID 再去 user_friends 中查找他的好友。那麼如果查找三度、四度、五度人脈該怎麼辦?
c. 圖形數據庫原理
- 圖數據庫源起歐拉和圖理論,也可稱爲面向/基於圖的數據庫,對應的英文是 Graph Database。圖數據庫的基本含義是以“圖”這種數據結構存儲和查詢數據,而不是存儲圖片的數據庫。它的數據模型主要是以節點和關係(邊)來體現,也可處理鍵值對。它的優點是快速解決複雜的關係問題。
- 圖可以說是頂點和邊的集合,或者說更簡單一點兒,圖就是一些節點和關聯這些節點的聯繫(relationship)的集合。
- 在圖計算中,基本的數據結構表達就是:
G=(V, E)
V=vertex(節點)
E=edge(邊)
- 圖數據庫名字的由來其實與其在底層的存儲方式有關,Neo4j 底層會以圖的方式把用戶定義的節點以及關係存儲起來,通過這種方式,可以高效的實現從某個節點開始,通過節點與節點間關係,找出兩個節點間的聯繫。
- 說到節點和關係,就必須引出一個非常重要的概念,屬性圖模型(Property Graph Model)。如下所示:
- 一個圖中會記錄節點和關係
- 關係可以用來關聯兩個節點
- 節點和關係都可以擁有自己的屬性
- 可以賦予節點多個標籤(類別)
- 舉例說明:
d. 圖數據庫 Neo4j
- 目前市面上有很多圖數據庫,例如:Neo4J、ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan、Cayley 等,但目前較爲活躍可以稱之爲代表的當屬 Neo4j。
- Neo4j 官方地址:https://neo4j.com/
- Neo4j 的安裝使用很簡單,如果是 Window 平臺的話直接安裝就可以,然後配置一下環境變量即可使用。具體可以參考:在 Windows 環境中安裝 Neo4j
e. 圖形數據庫總結
- 圖數據庫它善於處理大量的、複雜的、互聯的、多變的網狀數據,其效率遠遠高於傳統的關係型數據庫的百倍、千倍甚至萬倍。圖數據庫特別適用於社交網絡、實時推薦、銀行交易環路、金融徵信系統等廣泛的領域。