大數據時代到來,短視頻和大量圖片導致數據表非常大,頻繁的查詢導致傳統的關系型數據庫難以滿足需求,因此非關系型數據庫就應運而生。Redis數據庫是NoSQL是一種,其滿足強一致性和高可用性,強一致性就是要保證數據的質量,高可用性即穩定性,本文簡單介紹了非關系型數據庫是什么、能干嘛,與關系型數據庫的區別。
一、NoSQL定義
NoSQL(Not Only SQL),意即“不僅僅是SQL”,泛指非關系型數據庫。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據,這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
二、NoSQL的優勢
1.易擴展
NoSQL數據庫種類繁多,但有一個共同的特點是去掉關系數據庫的關系型特性。數據間無關系,這樣就非常容易拓展,無形之間在架構層面上帶來了可擴展的能力。
2.大數據量高性能
NoSQL數據庫具有非常高的讀寫性能,尤其在大數據量下,一秒鍾寫8萬,讀16萬次
3.多樣靈活的數據模型
NoSQL無需事先為要存儲的數據建立字段,隨時可以根據存儲自定義數據格式,而在關系型數據庫里增刪字段,比如在存儲微信用戶信息的表里添加一個手機號字段,簡直就是噩夢。
4.RDBMS和NoSQL
關系型數據庫&非關系型數據庫的對比
三、3V+3高
海量:微博
多樣:呈現方式是圖片、文字等,終端是手機、電腦、pad等。
實時:12306的鐵路信息需要做到實時更新,但是做不到絕對的實時,只能做到准實時。
高並發:12306在搶火車票的時候是高並發的
高可擴(擴展性):
橫向擴展:針對多台機器,多台機器整合成一個集群
縱向擴展:針對一台機器,2G不夠了,插兩條4G就變8G,但縱向擴展長期來看總有盡頭
四、NoSQL數據模型簡介
(一)我們以一個電商客戶、訂單、訂購、地址模型來對比關系型數據庫和非關系型數據庫數據庫的區別
1.關系型數據庫:
由下圖可知關系型數據庫是多表關聯的
2.非關系型數據庫:
非關系型數據庫就像一個jason串一樣,被稱為聚合模型,可以通過查詢用戶ID,得到該用戶基本信息,訂單信息等全部信息,不想關系型數據庫的表一樣多表關聯
(二)思考
為什么上述情況可以用聚合模型來處理?
1.關系型數據庫的缺點
在關系型數據庫里我們使用left join命令進行多表關聯查詢,如果涉及多張表,查詢語句會很長很復雜,查詢性能也較低下;
如果用戶信息和訂單信息放在不同的數據庫里,會使數據查詢加大難度;
分布式事務無法支持太多並發;
·2.非關系型數據庫的優勢
NoSQL只要查到客戶信息的ID,所有的信息都放在一起,不用像關系型數據庫查很多表
(三)聚合模型
1.KV鍵-值對
2.文檔型數據庫(Bson格式比較多):見上截圖非關系型數據庫的數據結構表
典型:CouchDB、MongoDB,其中Monddb是一個基於分布式文件存儲的數據庫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案,它是最像關系型數據庫的非關系型數據庫,
3.列存儲數據庫:
典型:Cassandra、HBase、分布式文件系統
4. 圖關系數據庫:
典型:Neo4J、InfoGrid
圖不是用來放圖形的,放的是關系比如:我們復雜的親戚人際關系,微博上好友關注話題,專注於構建關系圖譜
補充:
四種類型的總結
五、分布式數據庫中CAP原理及CAP+BASE
(一)傳統的ACID(關系型數據庫特點)是什么
1.A(Atomicity)原子性
事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里所有的操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。例如銀行轉賬,首先從A賬戶中取出100元,然后轉入B賬戶,這兩步要么一起完成,要么一起不完成,如果只完成A賬戶取錢的操作,轉入B賬戶失敗,那么會莫名其妙少了100元。
2.C(Consistency)一致性
事務的運行不會改變數據庫原本的一致性約束,例如年齡這個字段必須輸入int值,不能輸入字符串。
3.I(Isolation)獨立性
並發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另一個事務修改,只要另一個事務未提交,它所訪問的數據就不受到未提交事務修改的影響,拿之前轉賬100元的例子做比方,在100元沒有轉入B賬戶的時候,查詢B賬戶余額是看不到新增的100元的。
4.D(Durability)持久性
持久性是指一旦事務提交,它所做的修改將永遠保存在數據庫上。
(二)NoSQL的CAP原理
1.C(Consistency)強一致性
淘寶商品的點贊數不用做到強一致性;但公司每日的早晚打卡軟件就需要做到強一致性,不然影響員工的KPI
2.A(Avaliability)可用性
網站不能崩了
3.P(Partition tolerance)分區容錯性
補充1:
CAP原理的三點中滿足只能兩個,而由於當前的網絡硬件肯定會出現延遲丟包等問題,所以分區容錯性是我們必須要實現的,我們只能在一致性和可用性之間進行權衡。
采用CA的是傳統型Oracle數據庫;
采用AP的是大多數網站架構;
采用CP的是Redis、Mongodb,如下圖:
補充2:C與A的選擇
(三)BASE
BASE是為了解決關系型數據庫強一致性,引起的可用性降低問題而提出的解決方案,例如雙十一當時可能商品點贊數10000,但是只統計到6000,是弱一致性,但是高峰結束之后還是想讓數據不那么離譜,所以加上BASE。他的思想是通過讓系統放松對某一時刻數據一致性的要求來換取系統整體伸縮性和性能上的改觀。BASE是三個術語的縮寫,最重要的就是最終執行:
1.BA(Basically Available)基本可用
2.S(Soft state)軟狀態
3.E(Eventually consistent)最終一致