NoSQL數據庫數據模型(筆記)

NoSQL(Nosql=Not only Sql),意即不僅僅是SQL。泛指非關係型數據庫
這些類型的數據存儲不需要固定的模式,無需多餘的操作就可以橫向擴展。

NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關係數據庫的關係型特性。
數據之間無關係,這樣就非常容易擴展,也無形之間在架構的層面上帶來了可擴展的能力。

NoSQL無需事先爲要存儲的數據建立字段,隨時可以存儲自定義的數據格式,而在關係型數據庫中,增刪字段是一件非常麻煩的事,如果是非常大數據量的表,增加字段簡直是一個噩夢。

大數據時代的3V:海量Volume,多樣Variety,實時Velocity
互聯網需求的3高:高可用,高性能,高可擴

當下應用是sql和nosql一起使用。
關係型數據庫用來存儲不怎麼變的信息。

傳統的關係型數據庫設計:ER圖(1:1/1:N/N:N,主外鍵等常見)
NoSQL數據庫設計:用BSon構建數據模型

高併發的操作不太簡易有關聯查詢的(join),互聯網公司用冗餘數據來避免關聯查詢,分佈式事務是支持不了太多的併發的。

NoSQL數據模型簡介:聚合模型(KV鍵值、BSon、列簇、圖形)
列簇:是按列存儲數據的,最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或某幾列的查詢有非常大的IO優勢。

NoSQL數據庫分類:
1.鍵值(key-value) redis
應用場景:內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等。
數據模型:Key指向Value的鍵值對,通常用hashtable來實現
優點:查找速度塊
缺點:數據無結構化,通常只被當作字符串或二進制數據
2.列存儲數據庫 HBase
應用場景:分佈式文件系統
數據模型:以列簇式存儲,將同一列數據存儲在一起
優點:查找速度塊,可擴展性強,更容易進行分佈式擴展
缺點:功能相對侷限
3.文檔型數據庫 MongoDb
應用場景:web應用,與Key-value類型相似,value是結構化的,不同的是數據庫能夠了解value的內容。
數據類型:Key-value對應的鍵值對,value爲結構化數據。
優點:數據結構要求不嚴格,表結構可變,不需要像關係型數據庫一樣需要預先定義表結構
缺點:查詢性能不高,而且缺乏統一的查詢語法
4.圖形數據庫 Neo4J
應用場景:社交網絡,推薦系統等。專注於構建關係圖譜。
數據模型:圖結構
優點:利用圖結構相關算法,如最短路徑尋址、N度關係查詢

傳統的ACID:原子性(Atomicity)、一致性(Consistency)、獨立性(Isolation)、持久性(Durability)

1. 原子性
一個原子事務要麼完整執行,要麼乾脆不執行。這意味着,工作單元中的每項任務都必須正確執行。如果有任一任務執行失敗,則整個工作單元或事務就會被終止。即此前對數據所作的任何修改都將被撤銷。如果所有任務都被成功執行,事務就會被提交,即對數據所作的修改將會是永久性的。
2. 一致性
一致性代表了底層數據存儲的完整性。它必須由事務系統和應用開發人員共同來保證。事務系統通過保證事務的原子性,隔離性和持久性來滿足這一要求; 應用開發人員則需要保證數據庫有適當的約束(主鍵,引用完整性等),並且工作單元中所實現的業務邏輯不會導致數據的不一致(即,數據預期所表達的現實業務情況不相一致)。例如,在一次轉賬過程中,從某一賬戶中扣除的金額必須與另一賬戶中存入的金額相等。
3. 獨立性
獨立性意味着事務必須在不干擾其他進程或事務的前提下獨立執行。換言之,在事務或工作單元執行完畢之前,其所訪問的數據不能受系統其他部分的影響。
4. 持久性
持久性表示在某個事務的執行過程中,對數據所作的所有改動都必須在事務成功結束前保存至某種物理存儲設備。這樣可以保證,所作的修改在任何系統癱瘓時不至於丟失。

NoSQL數據庫中CAP原理:Consistency(強一致性)、Availability(可用性)、Partition tolerace(分區容忍性)

CAP理論的核心是:一個分佈式系統不可能同時很好的滿足一致性,可用性和分區容錯性,最多隻能同時較好的滿足兩個。

因此CAP理論將NoSQL分成了滿足CA、CP、AP原則的三大類。
CA:單點集羣,滿足一致性、可用性的系統,通常在可擴展性不太強
CP:滿足一致性、分區容忍性的系統,通常性能不是特別高
AP:滿足可用性、分區容忍性的系統,通常對一致性要求低一些

而由於當前網絡硬件肯定會出現延遲丟包等問題,所以分區容錯性必須需要實現。
CA 傳統Oracle數據庫
AP 大多網站架構的選擇
CP Redis MongoDb

數據庫一致性需求:
很多web實時系統並不要求嚴格的數據庫事務,對讀一致性的要求低,有些場合對寫一致性要求並不高,允許實現最終一致性。

數據庫的寫實時性和讀實時性:
對關係數據庫來說,插入一條數據後立刻查詢,肯定是可以讀出這條數據的,但是對於很多web應用來說,並不要求這麼高的實時性,比如說發送一條消息之後,過幾秒乃至十幾秒後,我的訂閱者才能看到這條動態是完全可以接受的。

BASE就是爲了解決關係數據庫強一致性引起的問題而引起的可用性降低而提出的解決方案。
BASE是下面三個術語的縮寫:
1.基本可用(Basically Available)
2.軟狀態(Soft state)
3.最終一致性(Eventually consistent)

它的思想是通過讓系統放鬆對某一時刻數據一致性的要求來換取系統整體伸縮性和性能上改變。

分佈式系統(distributed system)
由多臺計算機和通信的軟件組件通過計算機網絡鏈接(本地網絡或廣域網)組成,分佈式系統是建立在網絡之上的軟件系統。正是因爲軟件的特性,所以分佈式系統是具有高度的內聚性和透明性。因此,網絡和分佈式系統之間的區別更多的在於高層軟件(特別是操作系統),而不是硬件。分佈式系統可以應用在不同的平臺上,如:PC、工作站、局域網或廣域網等。

簡單來講:
1.分佈式:不同的多臺服務器上部署不同的服務模塊(工程),他們之間通過Rpc/Rmi之間通信和調用,對外提供服務和組內協作。
2.集羣:不同的多臺服務器部署相同的模塊,通過分佈式調度軟件進行統一的調度,對外提供服務和訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章