Nosql資料模型
聚合模型
- KV鍵值
-
Bson :BSON()是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,
它和JSON一樣,支援内嵌的文檔對象和數組對象
-
列族 :顧名思義,是按列存儲資料的。最大的特點是友善存儲結構化和半結構化資料,友善做資料壓縮,
對針對某一列或者某幾列的查詢有非常大的IO優勢。
- 圖形
資料庫的四大分類
<1>鍵值(k-v)存儲資料庫
這是最常見的Nosql資料庫,它的資料是以key-value的形式存儲的。key-value模型對于IT系統來說優勢在于簡單、易部署。它的處理速度非常快,但是基本上隻能通過key的完全一緻性查詢資料如果DBA隻對部分值進行查詢或者更新的時候,key-value就顯得效率低下了。根據資料的儲存方式可以分為臨時性、永久性和兩者兼具三種。例如;Redis,Oracle。
<2>列存儲資料庫
這種資料庫通常是用來應對分布式存儲的海量資料。鍵依然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:HBASE,Cassandra,Riak。
<3>文檔型資料庫
文檔型資料庫的靈感是來自于Lotus Notes辦公軟體的,而且它同第一種鍵值存儲相類似。該類型的資料模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型資料庫可 以看作是鍵值資料庫的更新版,允許之間嵌套鍵值。而且文檔型資料庫比鍵值資料庫的查詢效率更高。如:CouchDB, MongoDb. 國内也有文檔型資料庫SequoiaDB,已經開源。
<4>圖形資料庫
圖形結構的資料庫同其他行列以及剛性結構的SQL資料庫不同,它是使用靈活的圖形模型,并且能夠擴充到多個伺服器上。NoSQL資料庫沒有标準的查詢語言(SQL),是以進行資料庫查詢需要制定資料模型。許多NoSQL資料庫都有REST式的資料接口或者查詢API。如:Neo4J, InfoGrid, Infinite Graph.
四大分類對比
分類 | Example舉例 | 典型應用場景 | 資料模型 | 優點 | 缺點 |
---|---|---|---|---|---|
鍵值(key-value) | Redis,Oracle,Voldemort | 記憶體緩存,主要同于處理大量資料的高通路父負載,也用于一些日志系統 | key指向value的 鍵值對,通常用 hsah table來 實作 | 查詢速度快 | 資料無結構化, 通常隻被當做字元串 或者二進制資料 |
列存儲資料庫 | Cassandra,HBASE,Riak | 分布式的檔案系統 | 以列族式存儲, 将同一列資料存在一起 | 查找速度快, 可擴充性強, 更容易進行分布式擴充 | 功能相對局限 |
文檔型資料庫 | CouchDB,MongoDb | web應用(與Key-Value類似, Value是結構化的,不同的是資料庫能夠了解Value的内容) | key-value對應的鍵值對, value為結構化資料 | 結構資料要求不嚴格, 表結構可變, 不需要像關系型資料庫一樣需要預先定義表結構 | 查詢性能不高, 而且缺乏統一 的查詢文法 |
圖形資料庫 | Neo4j,infoGrid,Infinite Graph | 社交網絡,推薦系統。 專注于建構關系圖譜 | 圖結構 | 利用圖結構相關算法。 比如最短路徑尋址,N度關系查找等 | 很多時候需要對整個圖做計算才能得出需要的資訊,而且這種結構不太好做分布式額叢集方案 |
适用情景
1、資料模型比較簡單
2、需要靈活性更強的IT系統
3、對資料庫性能要求較高
4、不需要高度的資料一緻性
5、對于給定key,比較容易映射複雜值的環境
傳統資料庫的ACID規則
1、A(Atomicity)原子性
原子性就是說事務裡的所有操作要麼全部完成,要麼全部都不做,事務成功的條件是是事務裡所有的操作都成功,隻要有一個操作失敗,整個事務就失敗,需要復原。
2、C(Consistency)一緻性
一緻性是說資料要一直處于一緻的狀态,事務的運作不能改變資料庫原本的一直性限制。
3、I(Isolation)獨立性
所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要通路的資料正在被另外一個事務修改,隻要另外一個事務未送出,他所通路的資料就不受未送出事務的影響。
4、D(Durability)持久性
持久性是指一旦事務送出後,他所做的修改将會永久儲存在資料庫上,即使出現當機也不會丢失。
CAP理論
CAP理論是Brewer教授提出的:一個分布式系統不能同時滿足一緻性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)。最多隻能同時較好的滿足兩個
是以,根據CAP原理,将Nosql資料庫分成了滿足CA原則、CP原則、AP原則三大類;
CA:單點叢集,滿足一緻性,可用性的系統,通常在可擴充性上不太強大。(傳統型資料庫)
CP:滿足一緻性,分區容錯性的系統,通常性能不是特别高。(Redis、MongoDB)
AP:滿足可用性,分區容錯性的系統,通常可能對一緻性的要求要低一點。(大多數的網站架構選擇)
CAP詳解
<1>一緻性(Consistency)
對于所有用戶端,具有唯一的、最新的、可讀的版本的資料。這和前面的ACID的一直性不太一樣。這裡的一直性主要關注的是多個用戶端從多個複制分區讀取的内容并得到一緻性的結果。簡單的說就是所有節點同一時間看到的是相同的資料;
<2>可用性(Availability)
不管是否成功,確定每一個請求都能接收到響應。
<3>分區容錯性(Partition Tolerance)
即使資料庫分區之間存在通信故障,系統仍然保持響應用戶端請求的能力。
注:CAP定理隻适用于叢集中出現連接配接故障的某些情況。網絡越可靠,需要考慮CAP定理的可能性就越低
如有總結不當,有問題,錯誤的地方請大家予以指正,共同學習,共同進步
參考資料
(https://yq.aliyun.com/articles/96844/?spm=a2c4e.11153940.blogcont96902.25.3cd6370cqpe6l9)
(https://blog.csdn.net/xiaojin21cen/article/details/81355811)
https://yq.aliyun.com/articles/47327?spm=a2c4e.11153940.blogcont96844.26.7e637e8aaIcPJc
(https://yq.aliyun.com/articles/524924?spm=a2c4e.11153940.blogcont96844.19.7e637e8aaIcPJc)