- 當前互聯網面臨着3V+3高的問題
3V:海量Volume 多樣Variety 實時Velocity
3高:高併發 高擴展 高性能 - NoSQL 數據模型簡介 (聚合模型)
1> KV 鍵值: 新浪-- BerkeleyDB +Redis 美團-- redis+tair 阿里百度-- memcache+redis
2> 文檔型數據庫(BSON格式較多): CouchDB MongoDB基於分佈式文件存儲的數據結構,由C++編寫
3>列存儲數據庫:Cassandra,HBASE 分佈式文件系統
4>圖關係數據庫:他不是放圖形的,放的是關係比如:朋友圈社交網絡,廣告推薦系統 Neo4j,InfoGrid
四者對比
分類 | Examples舉例 | 典型的應用場景 | 數據模型 | 優點 | 缺點 |
---|---|---|---|---|---|
鍵值對 | Redis Oracle BDB | 內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等 | key指向Value的鍵值對,通常用HashTable實現 | 查找速度快 | 數據無結構化,通常只被當作字符串或者二進制數據 |
文檔 | MongoDB CouchDB | web應用(與key-value類似,Value是結構化的,不同的是數據庫能夠了解Value的內容) | KV鍵值對,Value爲結構化數據 | 數據結構要求不嚴格,表結構可變,不需要像關係型數據庫一樣需要預先定義表結構 | 查詢性能不高,而且缺乏統一的查詢語法 |
列存儲 | HBase Cassandra | 分佈式文件系統 | 以列簇式存儲,將同一列數據存儲在一起 | 查找速度快,可擴展強,更容易進行分佈式擴展 | 功能相對侷限 |
圖形 | Neo4j,InfoGrid | 社交網絡,推薦系統,專注於構建關係圖譜 | 圖結構 | 利用圖結構相關算法,比如最短路徑尋址,N度關係查找 | 很多時候需要對整個圖計算才能得到需要的信息 |
- 什麼是BSON
BSON() 是一種類json的一種二進制的存儲格式,簡稱Binary JSON,他和JSON一樣,支持內嵌的文檔對象和數組對象 - 什麼是ACID
Atomicity原子性 Consistency一致性 Isolation獨立性 Durability持久性 - 什麼是CAP
Consistency強一致性 Availability可用性 Partition tolerance 分區容錯性
CAP的理論核心是:一個分佈式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多同時可以較好地滿足兩個。
因此,根據CAP原理將NoSQL數據庫分成了滿足CA原則,滿足CP原則和滿足AP原則三類
CA – 單點集羣,滿足一致性,可用性的系統,通常在可擴展性上不太強大
CP – 滿足一致性,分區容忍性的系統,通常性能不是特別高,Redis MongoDB
AP – 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一點 - 什麼是BASE
BASE就是爲了解決關係數據庫強一致性引起的問題可用性降低而提出的解決方案
BASE其實是下面三個術語的縮寫:基本可用 Basically Availabe 軟狀態 Soft state 最終一致 Eventually consistent
他的思想是通過讓系統放鬆對某一時刻數據一致性的要求來來換取系統整體伸縮和性能上改觀。爲什麼這麼說呢,緣由就在於大型系統往往由於地域分佈和極高性能的要求,不可能採用分佈式事務來完成這些指標,想要獲得這些指標,我們必須採用另一種方法完成,這裏BASE就是 解決這個問題的辦法。 - 分佈式和集羣
分佈式系統: 由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成。分佈式系統是建立在網絡上的軟件系統。正是因爲軟件的特性,所以分佈式系統具有高度的內聚性和透明性。因此網絡和分佈式系統之間的區別更多的在於高層軟件(特別是操作系統),而不是硬件。分佈式系統可以應用在不同的平臺上,如:PC 工作站 局域網和廣域網上等
簡單來講:
分佈式:不同的多臺服務器上面部署不同的服務模塊(工程),他們之間通過RPC/RMI 之間通信和調用,對外提供服務和組內協作
集羣:不同的多臺服務器上面部署相同的服務模塊,通過分佈式調度軟件進行統一的調度,對外提供服務和訪問