java - 分佈式 - nosql

首先: NoSql = not only sql  。。。    估計第一次見的就我一個覺得是不用sql。。。html

1. NoSql泛指非關係數據庫。(mysql,oracle 都是經典的關係數據庫)mysql

 

2. 關係型數據庫 和 非關係數據庫 最簡單的區別:redis

關係型數據庫是有行列的,柵格結構。spring

非關係型不用行列結構存儲數據。而是其餘形式儲存數據:好比key value鍵值對,列,BSON,圖 等結構sql

 

3.非關係型 vs 關係型數據庫

非關係型數據庫的優勢:緩存

1. nosql能夠直接存儲對象,圖片等,並且更利於擴展,添加緩存,分佈式存儲。(關係數據庫有表關係,join,外鍵一類的,致使牽一線而動全身,分佈式存儲會很困難)服務器

2. nosql讀寫更快。 (關係數據庫須要用同時更新索引因此會比較慢)架構

關係型數據庫的優勢:oracle

1. 由於有索引因此查詢更快

2. 標準化的表結構保證了數據的一致性,使得事務邏輯更清晰。

3. 可使用join等複雜查詢。

4. 並且發展時間長,更加穩定可靠。

 

爲何使用NoSql

1. 

傳統網站架構:

數據庫 - spring(dio, service) - springMVC(controller) - view(jsp/html)

隨着用戶訪問量增長,一個數據庫可能沒法處理那麼多數據,須要改進

解決:

1. 添加cache(緩存), 處於dal和數據庫之間,把常用的數據直接從緩存中讀取而不是重複數據庫查詢。

2.主從分離,讀寫分離。  在不一樣數據庫上設立主表和從表,主表存常常修改的數據(好比商品評價),從表存只讀不寫的數據(好比淘寶的用戶帳號信息,商品基本信息)。

3.分佈式集羣。 使用分佈式(簡單說就是把一個工程的數據分佈到不少個服務器上)用多個服務器用來存儲數據。(好比一個專門存客戶,一個專門存商家,一個專門存商品等)

4. 後來隨着數量愈來愈大,關係型數據庫在分佈式方面的弱勢愈來愈明顯,因此出現了NoSql

 

因爲Nosql修改快,mysql查詢快,因此目前主流結構是:Nosql 和 mysql 結合。

商品基本信息:mysql

商品描述(大字段):MongDB

商品圖片:文件存儲數據庫TFS

商品熱搜高頻字段:內存數據庫(redis)

 

數據庫事務特色:

傳統數據庫ACID:

Atomic(原子性)
Consistency(一致性)
Isolation(隔離性)
Durability(持久性)

 

CAP:

CA P原則又稱CAP定理,指的是在一個 分佈式系統中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼(3選2)。
一致性(C):在分佈式系統中的全部數據備份,在同一時刻是否一樣的值。(等同於全部節點訪問同一份最新的數據副本)
可用性(A):在集羣中一部分節點故障後,集羣總體是否還能響應客戶端 的讀寫請求。(對數據更新具有高可用性)
分區容忍性(P):以實際效果而言,分區至關於對通訊的時限要求。系統若是不能在時限內達成數據一致性,就意味着發生了分區的狀況,必須就當前操做在C和A之間作出選擇。

mysql 等數據庫就是CA類型

redis,MongDB等是CP

CouchDB是AP原則。

大多數網站開發遵循AP原則:

由於分佈式系統中,分區是必須的,因此P鎖定了。

而後可用性確定要一直保證。

 

而爲了解決一致性,採用用BASE的原則:

基本可用(basically available):保證C

軟狀態(soft state):數據能夠暫時性不一致

最終一致(eventually consistent):在最後的時候保持一致

好比雙11,爲了減小壓力,能夠容許一些數據不一致(好比你在雙11的 0 點買了一個商品,60%的人都是在那1分鐘內點下單,因此先只更新客戶表和庫存表,讓你知道你買了。可能商家的表裏還沒更新,他還不知道你買了)。等過了高峯後再同步各個分佈式數據庫的數據。

相關文章
相關標籤/搜索