天天看點

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.叢集:不同的多台伺服器部署相同的子產品,通過分布式排程軟體進行統一的排程,對外提供服務和通路。