《大數據技術原理與應用》暑假學習計劃_06 - NoSQL簡述
NoSQL概述
沒有接觸NoSQL時一直不太明白NoSQL的含義,一直覺得NoSQL只是一中新型數據庫的名稱。但直到前幾天學習以後我才確實瞭解到了NoSQL其真正的魅力。數據庫
NoSQL → Not noly SQL數組
NoSQL數據庫真正興起的緣由在於傳統關係型數據庫沒法知足Web2.0的需求,並且關係模型的侷限,以及Web2.0關係型數據庫的許多特性沒有發揮。瀏覽器
NoSQL數據庫具備靈活可擴展性能夠在多個節點水平擴展,並且具備靈活的數據模型,以及與底層雲計算緊密結合。網絡
傳統關係型數據庫架構
- 傳統關係型數據庫的優勢
- 具備很是完備的關係理論基礎
- 具備事務性機制的支持
- 高效的的查詢優化機制
- 傳統關係型數據庫的缺點
- 沒法知足海量數據管理需求
- 沒法知足高併發的需求
- 沒法知足高可擴展性和高可用性需求
傳統MySQL集羣缺陷併發
- 複雜性:集羣部署管理配置複雜
- 延時性:主庫壓力大時,會帶來較大時延
- 擴容問題:整個集羣壓力過大時,增長機器時需對數據集再次分區,比較複雜
Web2.0一般不須要嚴格數據庫事務,也不須要嚴格讀寫實時性,不包含複雜SQL查詢,多表鏈接操做對Web2.0時代徹底是雞肋。分佈式
關係型數據庫與NoSQL數據庫對比
- 數據庫原理
- 關係型數據庫:具備完備的關係代數理論做爲基礎
- NoSQL數據庫:NoSQL數據庫缺少理論基礎
- 數據規模
- 關係型數據庫:很難實現橫向擴展,縱向擴展十分有限,沒法支持海量數據存儲
- NoSQL數據庫:具備很是好的水平擴展性
- 數據庫模式
- 關係型數據庫:要定義嚴格數據庫模式,嚴格遵照事先定義的數據庫模式
- NoSQL數據庫:數據模式靈活
- 查詢效率
- 關係型數據庫:適當數據量級查詢效率較高
- NoSQL數據庫:未構建面向複雜查詢的索引,查詢性能較差
- 事務一致性
- 關係型數據庫:遵循ACID事務模型保證事務一致性
- NoSQL數據庫:未構建面向複雜查詢的索引,不支持事務強一致性,只保證最終一致性
- 數據完整性
- 關係型數據庫:具備保證完整性的完備機制
- NoSQL數據庫:不能實現完整性約束
- 可擴展性
- 關係型數據庫:擴展性較差
- NoSQL數據庫:水平擴展性很是好
- 可用性
- 關係型數據庫:規模增大時爲保證一致性可用性相對削弱
- NoSQL數據庫:可用性較好
- 標準化
- 關係型數據庫:遵循SQL標準,標準化較完善
- NoSQL數據庫:未造成通用行業標準
- 技術支持
- 關係型數據庫:大部分爲商業數據庫,可得到較強大的技術支持和完備的後續服務
- NoSQl數據庫:開源產品,仍屬於發展階段
- 可維護
- 關係型數據庫:管理員維護
- NoSQL數據庫:沒有成熟的基礎和實踐操做規範維護較複雜
- 應用場景
- 關係型數據庫:電信銀行等關鍵業務系統
- NoSQL數據庫:互聯網企業及一些傳統非關鍵業務
NoSQL數據庫四大類型
鍵值數據庫:
數據模型:一堆鍵值對(鍵能夠是任意類型的數據)高併發
優勢:擴展性好,靈活性好,大量讀寫性能好,是理想的緩衝層解決方案。底層數據庫 → 緩衝層 → 瀏覽器性能
缺點:沒法存儲結構化信息,條件查詢效率較低,不支持值查找學習
列族數據庫:
數據模型:列族
相似HBase根據列族進行垂直劃分,根據行鍵進行水平劃分。
優勢:查找速度快,容易進行分佈式擴展,複雜性較低。
缺點:無事務一致性。
NoSQL理論基礎
CAP理論
consistency 一致性:全部節點在同一時間必須有一致數據
availabily 可用性
partitiontderance 分區容忍性
CA:將全部事務相關內容放在同一臺機器上,避免網絡分區(傳統關係型數據庫)
CP:使用網絡分區,等數據以以後再存取數據,短期內沒法取到數據,失去可用性
AP:可及時得到數據,但數據可能存在不一致
BASE 「鹼」
基本可用:容許部分分區失敗
軟狀態:一段時間內數據可能不一樣步,有滯後
最終一致性:可能有一段時間不一樣步。根據更新數據後各進程訪問到數據時間和方式不一樣能夠區分爲
- 因果一致性
- 「讀己之所寫「一致性
- 單調讀一致性
- 會話一致性
- 單調寫一致性
假設有一個分佈式系統,爲實現其可靠性,要對數據進行冗餘存儲
N → 數據冗餘份數
W → 更新數據時須要保證寫完成的節點數
R → 讀取數據時需讀取的節點數
- W+R>N → 強一致性
- W+R<=N → 弱一致性(最終一致性時弱一致性的特例)
NewSQL
oldSQL:一種架構支持多類應用
NewSQL:多架構支持多類應用(同時具有oldSQL與NewSQL的優勢)
大數據時代:
- NewSQL分析
- oldSQL事務
- NoSQL互聯網
文檔數據庫MongDB
文檔數據庫MongDB:基於分佈式文件系統的開源數據庫
- 提供了面向文檔存儲,操做簡單
- 能夠設置任何屬性的索引,實現更快的排序
- 具備較好的水平可擴展性
- 支持豐富查詢表達式,可查詢文檔內嵌對象及數組
- 可替換已完成文檔某個指定數據字段
集合 → MongDB文檔組,相似於表。無固定結構,可對集合插入不一樣格式和類型的數據
文檔數據庫中文檔就是一個鍵值對,MongDB文檔不須要設相同字段而且相同字段不須要相同數據類型