一:爲何要用到NoSql?html
NoSQL(NoSQL = Not Only SQL ),意即「不只僅是SQL」,
泛指非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是
超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,而非關係型的數據庫則因爲其自己的特色獲得了很是迅速的發展。
NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題,包括超大規模數據的存儲。
(例如谷歌或Facebook天天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不須要固定的模式,無需多餘操做就能夠橫向擴展。
二:能幹嗎?
1.
擴展性比較強,沒有特定的數據類型,數據之間沒有關係,無形當中,在框架的層面上帶來可擴展能力
2.
大數據量,高性能:有很是高的讀寫性能,尤爲是在大數據的狀況下,一樣表現優秀(寫1秒8萬,讀1秒11萬),這得益於他的無關係性
數據結構簡單。
3.
多樣靈活的數據模型:NoSQL 無需事先爲要存儲的數據創建字段,可隨時存儲自定義的數據格式,而關係型數據庫,增刪字段是很是麻煩的,若是在很是大的數據庫量下,增刪字段簡直是噩夢
附:NoSQL 非關係型數據庫有:Tair,Redis,Memcache,MongBD(最像關係型數據庫的非關係型數據庫 )
Nosql不是ACID特性,因此徹底不適合來作支付,應該考慮關係型數據庫作支付
Nosql主要用來作數據分析,ETL,報表,數據挖掘,推薦,日誌處理等非交易場景
三:怎麼玩?(面試時問談談你對Redis理解,能幹什麼?)
KV:鍵值對
Cache:緩存
Persistence :持久化
四:3V和3高:
大數據下的3V: 海量(Volume),多樣(Variety),實時(Velocity),
互聯網需求的3高:高併發,高性能,高可擴
附:阿里去IOE:去除IBM小型機,去除Oracle,去除EMC存儲設備
阿里多隆工程師寫的搜索引擎:ISearch
牛逼的人在牛逼以前都會有一段苦逼的歲月,但只要你傻逼同樣的堅持,你會終將牛逼
五:BSON:
JSON的一種二進制形式的存儲模式,簡稱:Binary JSON
它和JSON同樣,支持內嵌的文檔對象和數組對象
附:
分佈式系統很是忌諱多表關聯查詢的 ***
六:NoSQL數據模型簡介:
七:NoSQL數據庫的四大分類
1. KV鍵值也是企業用到最多的
2. HBase:Hadoop的東西
3.圖關係數據庫,統計啊,朋友圈,廣告推薦(分析的不算太準,由於因素太多,可能打開網頁去打麻將了,沒看網頁)
四者對比:
附:MongoDB:(文檔型數據庫典型表明)
MongoDB 是一個基於
分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。
八:分佈式數據庫CAP原理和BASE(CAP又稱帽子理論)
1.CAP的3進2:http://www.cnblogs.com/maxlei/p/6833538.html
2.CAP理論的核心是:一個分佈式系統不可能同時很好的知足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的知足兩個。
所以,根據 CAP 原理將 NoSQL 數據庫分紅了知足 CA 原則、知足 CP 原則和知足 AP 原則三 大類:
CA - 單點集羣,知足一致性,可用性的系統,一般在可擴展性上不太強大。
CP - 知足一致性,分區容忍必的系統,一般性能不是特別高。
AP - 知足可用性,分區容忍性的系統,一般可能對一致性要求低一些。
3.BASE:
BASE就是爲了解決關係數據庫強一致性引發的問題而引發的可用性下降而提出的解決方案。
BASE實際上是下面三個術語的縮寫:
基本可用(Basically Available)
軟狀態(Soft state)
最終一致(Eventually consistent)
它的思想是經過讓系統放鬆對某一時刻數據一致性的要求來換取系統總體伸縮性和性能上改觀(犧牲A,換取CP)。爲何這麼說呢,原因就在於大型系統每每因爲地域分佈和極高性能的要求,不可能採用分佈式事務來完成這些指標,要想得到這些指標,咱們必須採用另一種方式來完成,這裏BASE就是解決這個問題的辦法
例子:淘寶雙11的時候犧牲放鬆高一致性來換取系統的性能,可是最終要把結果或者數據一致了。 犧牲A,換取CP
4.分佈式和集羣:
分佈式系統(distributed system)
由多臺計算機和通訊的軟件組件經過計算機網絡鏈接(本地網絡或廣域網)組成。分佈式系統是創建在網絡之上的軟件系統。正是由於軟件的特性,因此分佈式系統具備高度的內聚性和透明性。所以,網絡和分佈式系統之間的區別更多的在於高層軟件(特別是操做系統),而不是硬件。分佈式系統能夠應用在在不一樣的平臺上如:Pc、工做站、局域網和廣域網上等。
簡單來說:
1分佈式:不一樣的多臺服務器上面部署不一樣的服務模塊(工程),他們之間經過Rpc/Rmi之間通訊和調用,對外提供服務和組內協做。
2集羣:不一樣的多臺服務器上面部署相同的服務模塊,經過分佈式調度軟件進行統一的調度,對外提供服務和訪問。
例子:分佈式:拔羊毛,不能在同一只羊上拔毛。