redis學習筆記-02:爲何使用NoSQL數據庫

1、第一代:單機版的MySQLmysql

一、靜態網頁,動態交互類型的網站很少。web

二、架構:APP---->DAL---->MySQL Instanceredis

三、數據存儲的瓶頸:sql

(1)數據量總大小超過機器的內存數據庫

(2)數據的索引和數據量的大小超過機器的內存緩存

(3)訪問量(讀寫混合)超過一個實例承受的範圍服務器

 

2、Memcached(緩存)+MySQL+垂直拆分架構

一、隨着訪問量的上升,使用MySQL架構的網站會出現性能問題。web程序不能只關注功能的實現,還要追求性能,因而使用緩存技術來緩解數據庫的壓力。若是頻繁查詢的是一些經常使用的數據,那麼能夠把數據放在緩存中,減輕數據庫被訪問的壓力。併發

二、架構:APP---->DAL---->Cache---->(MySQL Instance1,MySQL Instance2,MySQL Instance3 ...)分佈式

三、一個MySQL數據庫裝不下數據,那麼經過多個MySQL實例來分擔數據。

 

3、MySQL主從複製,讀寫分離

一、爲了提升數據庫容災能力,主庫插入一條數據,從庫也會相應的新增數據。

二、隨着數據庫的寫入壓力增長,Memcahed只能緩解數據庫的讀取壓力,讀寫集中於一個數據庫會讓數據庫不堪重負。

三、因而採用主從複製技術來達到讀寫分離,好比多個MySQL數據庫,主庫(master)一個用來寫,從庫(slave)多個用來讀,即master-slave模式。

四、架構: APP---->DAL---->Cache---->MySQL Master---->(MySQL Slave1,MySQL Slave2 ...)。

 

4、分表分庫+水平拆分+mysql集羣

一、在Memcahed的高速緩存、MySQL主從複製和讀寫分離的基礎上,這時MySQL主庫的寫壓力出現瓶頸。

二、因而流行使用分表分庫來緩解寫壓力和數據量增加的擴展問題。

三、分庫是指:儘可能作到低耦合,與業務高度相關的、頻繁的、活躍的數據放在一個庫,低相關的放在另外一個庫。分表是指把海量的數據分開來寫入。

四、多個MySQL主從構成MySQL-Cluster集羣。架構:APP---->DAL---->Cache---->((MySQL M1 ,MySQL S11,MySQL S21 ...),(MySQL M 2,MySQL S21,MySQL S22 ...)... )。

 

5、NoSQL數據庫(Not Only SQL)

一、NoSQL數據庫泛指非關係數據庫,NoSQL數據庫的產生是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題,包括大規模數據的存儲。

二、NoSQL數據庫中的數據進行存儲時不須要固定的模式,去掉了關係,無需多餘操做就能夠橫向擴展。

三、MySQL等關係型數據庫在應付web2.0網站,特別是超大規模和高併發的web2.0純動態網站顯得力不從心,促成了NoSQL數據庫的發展。

 

6、NoSQL數據庫中的CAP原理

一、傳統關係型數據庫中的ACID:

(1)A:原子性(Atomicity),事務中全部操做要麼所有完成,要麼都不作,事務成功的條件是事務中全部的操做都功能,只要有一個操做失敗,整個事務就失敗,須要回滾。

(2)C:一致性(Consistency),數據庫要一直處於一致的狀態,事務的運行不會改變數據庫本來的一致性約束。

(3)I:獨立性(Isolation),併發的事務之間不會相互影響,若是有一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。

(4)D:持久性(Durability),一旦事務提交後,它所作的修改會永久地保存在數據庫上。

二、NoSQL的CAP:

(1)C:強一致性(Consistency),A:可用性(Availability),P:分區容錯性(Partition tolerance) 

(2)理論核心:一個分佈式系統不可能同時很好的知足強一致性、可用性和分區容錯性這三個需求,只能三選二。分區容錯性是必需要實現的,只能在一致性和可用性之間權衡。根據CAP原理將NoSQL數據庫分爲知足CA原則、知足CP原則和知足AP原則三大類。

(3)CA:單點集羣,知足一致性和可用性的系統,一般在可擴展性上不太強大。傳統的Oracle數據庫

(4)CP:知足一致性、分區容錯性的系統,一般性能不是特別高。redis,mongdb。

(5)AP:知足可用性和分區容錯性的系統,一般對一致性要求低一些。大多數網站架構的選擇,保證網站不要掛掉。不少web實時系統並不要求嚴格的數據庫事務,對讀一致性的要求很低,有時對寫一致性的要求也不高,運行實現最終一致性。

三、NoSQL的BASE:

(1)BASE就是爲了解決關係數據庫強一致性而致使可用性下降而提出的解決方案,它的思想是經過讓系統放鬆對某一時刻數據一致性的要求來換取系統總體伸縮性和性能上改觀。

(2)BA:基本可用(Basically Available),S:軟狀態(Soft State),E:最終一致性(Eventually Consistence)。

四、分佈式和集羣

(1)分佈式:不一樣的多臺服務器上面部署不一樣的服務模塊,他們之間經過Rpc/Rmi實現通訊和調用,對外提供服務和組內協做。

(2)集羣:不一樣的多臺服務器上面部署相同的服務模塊,經過分佈式的調度軟件進行統一的調度,對外提供服務和訪問。

相關文章
相關標籤/搜索