NoSQL數據庫淺析

興起原因 Not only SQL

傳統的關係性數據庫

關係代數理論基礎
RDBMS只能縱向擴展:通過一臺服務器增加性能終究難以滿足數據量增長。
嚴格的數據庫模式
索引機制,查詢優化引擎:適當量級查詢效率高
事務一致性:ACID
數據完整性:主鍵、約束
標準化:sql標準
技術支持:商業數據庫
可維護:管理員維護

關係型數據庫主從模式

面對日益增長的數據量,多臺服務器的寫主讀從,分離單臺服務器壓力,但效果有限,且:
集羣部署配置複雜
主庫壓力帶來延遲
擴容重新分區複雜

web2.0的需求

關係型數據庫事務機制需要額外的開銷,但是在Web2.0通常不要求嚴格的數據庫事務
不需要嚴格的讀寫實時性
不包含複雜的sql查詢:連接操作犧牲性能節約空間

擴充關係型數據庫無法實現的特點

1.靈活的可擴展性
2.靈活的數據模型
3.與雲計算緊密結合:根據負載動態伸縮集羣節點

NoSQL數據庫優勢

1.海量數據管理需求
2.高併發需求:動態數據實時生成性能需求
3.可擴展、高可用:突發事務訪問量急劇增大

NoSQL數據庫劣勢

缺乏底層理論基礎
事務強一致性:不適用關鍵業務

數據模型

不同場景下需要不同的數據模型

四大類型

在這裏插入圖片描述

鍵值數據庫

如Redis存儲鍵值對,
適合內容緩存
簡單的數據模型
頻繁讀寫
非結構化信息同時也有一些缺點,在一些場景下是不適合的:條件查詢效率低、鍵與鍵之間沒有辦法反應聯繫關係
Q:只能通過Key訪問Value,沒有辦法建立索引,關係型數據庫中建立索引爲什麼更高效?

列族數據庫

如HBase
海量數據分佈式存儲管理
副本中存在短期不一致的情況
動態字段的應用程序
部分支持強事務一致性

文檔數據庫

key對應文檔,數據內容和類型自我描述,性能好,高併發
JSON數據格式
相較於關係型數據庫,文檔數據庫信息的統一,避免了多表連接,方便遷移與併發
適用於:半結構化數據;存儲和索引管理面向文檔的數據
缺乏統一的查詢語法以及事務機制

圖數據庫

基於圖論
高度相互關係的數據
靈活性高,支持複雜的圖形算法

三大基石

CAP

Consistency:一致
Availability:時間
partition:分區不影響整體
三者最多取其二:
事務相關內容在同一臺機器
等數據一致再讀
不一致也要響應
BASE(Basically Availble Soft state &Eventual consistency)
BA:允許出現分區失敗
S:一段時間不同步
E:弱一致性,最終達到一致
因果一致性
讀己之所寫一致性
單調讀一致性:進程已經訪問到某個數據,後續訪問不會返回那個值之前的舊值
會話一致性
單調寫一致性:同一個進程寫操作順序執行

實現方式

N:冗餘存儲
W:更新
R:讀幾分數據
W+R>N:強一致性
HDFS:W=N,R=1
反之弱一致性
什麼是最終一致性?

NewSQL數據庫

在這裏插入圖片描述
分析性應用:newsql
事務性應用:關係型數據庫
互聯網應用:nosql
newsql=nosql設計架構+關係型數據庫事務一致性

MongoDB

在這裏插入圖片描述
C++;開源;二進制Json
可以建立索引;可擴展性;查詢表達式;批量處理與聚合操作

文檔數據庫優勢在哪裏?傳統數據庫增加冗餘不行嗎?
沒有固定結構
在這裏插入圖片描述
在這裏插入圖片描述