NoSQL
1.1為什么要用NoSQL
面對現在用戶數據的急劇上升,我們需要對這些用戶數據進行挖掘,傳統的關系型數據庫已經不適合這些 應用了.Nosql?的發展可以很了的處理這些大的數據.
1.2什么是NoSQL
Not???Only???Sql->NoSQL(不僅僅是SQL)
非關系型數據庫.隨著web2.0 網站的興起,傳統的關系型數據庫已經無法面對web2.0,?特別是大規模和高?并發的SNS?類型的web2.0 純動態網站了,暴露了許多難以克服的困難.而非關系型數據庫則由于其本身的?特點得到了迅速的發展.NoSQL??數據庫的產生就是為了解決在規模數據集合多種數據種類帶來的挑戰,尤?其是大數據應用難題.包括超大規模數據的存儲.
面對每天用戶大量的數據,有些數據的類型不需要固定的模式,無需多余的操作就可以進行橫向擴展
1.3?NoSQL能干什么
1:?易擴展
2:?大數據量高性能
3:?多樣靈活的數據模型
4:傳統RDBMS?VS?NOSQL
1:易擴展
NoSQL?數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型我.
數據之間無關系,這樣就非常容易擴展,也無形之間在架構的層面上帶來了可擴展的能力.
2:大數據量高性能
NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀.這得益于他的無關系性,數據庫?的結構簡單.
一般MySQL使用Query??Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0 的交互?頻繁的應用,Cache?性能不高,而NoSQL?的Cache 是記錄級的.是一種細粒度的Cache,所以NoSQL?在這個層?面上來說就要性能高很多了
3:多樣靈活的數據模型
NoSQL?無需事先為要存儲的數據建立字段.隨時可以存儲自定義的數據格式,而在關系數據庫里.增刪字段?是一件非常麻煩的事情.如果是非常大數據量的表.增加字段簡單就是一個噩夢
4:傳統?RDBMS?VS?NOSQL
RDBMS--> 傳統關系型數據庫.
●高度組織化結構化數據.
●結構化查詢語言(SQL).
●數據和關系都存儲在單獨的表中.
●數據操縱語言,數據定義語言.
●嚴格的一致性.
●基礎事務
NoSQL
●代表著不僅僅是SQL
●沒有聲明性查詢語言
●沒有預訂義的模式
●鍵值對存儲,列存儲,文檔存儲,圖形數據庫
●最終一致性.而非ACID?屬性.
●非結構化和不可預知的數據
●?CAP定理
●高性能,高可用,可伸縮性
1.4去哪下
-
1:Redis
2:Memcache
3:Mongdb??(基于分布式文件存儲數據庫,旨在為webAPP提供可擴展的高性能數據存儲解決方案,是一個?介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的)
高速緩沖-->?Memcache
一莊多能,數據類型豐富-->Redis
1.5怎么玩
- Key-Value
- Cache?高速緩沖?
- Persistence
1.6?3V3高
●?海量?Volume大數據時代的3V:●?多樣?Variety
●?實時Velocity?互聯網需求的3高:
VS
●?高?并?發
●?高?可?擴
●?高?性?能
3??NoSQL數據模型簡介
聚合模型:
1:KV?鍵值對
2:BSon(類似于JSON)
3:列族(按列存儲數據,最大特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或某幾?列的查詢有非常大的IO?優勢)
4:圖?形
4?NoSQL?DB?四大分類
KV 鍵值(Redis)
優勢:查找速度快
缺點:數據無結構化,通常只被當作字符串或二進制數據
文檔型數據庫(MongoDB)bson????格式比較多
優勢:數據結構要求不嚴格,表結構可變,不需要像關系型數據庫一樣需要預先定義表結構
缺點:查詢性能不高,而且缺乏統一的查詢語法.
列存儲數據庫(Cassandra,HBase) ?分布式文件系統
優勢:查找速度快,可擴展性強,更容易進行分布式擴展
缺點:功能相對局限
圖關系數據庫(Neo4J,InfoGrid)??他不是放圖形的,放的是關系比如朋友圈社交網絡,廣告推薦系統,社交網?絡,推薦系統等,專注于構建關系圖譜
優勢:利用圖結構相關算法,比如最短路徑尋址,N度關系查
缺點:很多時候需要對整個圖做計算才能得出需要的信息而且這種結
新浪:BerkeleyDB+redis
美團:redis+tair
阿里,百度:memcache+redis
5 分布式數據庫CAP?原理
5.1 ACID vs CAP
傳統關系型數據庫-->ACID:
英文 | 中文 |
Atomicity | 原子性 |
Consistency | 一致性 |
Isolation | 獨立性 |
Durability | 持久性 |
事務:transaction, ?與現實中的交易很類似.
● ????Atomicity(原子性)
指事務里的所有操作要么都做完,要么都不做.事務成功的條件是事務的所有操作都成功,只要有一個?操作失敗,整個事務就失敗.需要回滾.
·Consistency ???????(一致性)
指數據庫要一直處于一致的狀態,事務的運行不會改變數據庫原本的一致性約束
●?????Isolation(獨立性)
指事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務 未提交.他所訪問的數據就不受未提交事務的影響.?(比如你正在查看你的銀行賬戶,有人正在給你轉 ?錢,如果這個轉錢的動作未提交,你查的時候是看不到這筆錢的)
●?????Durability(持久性)
指事務一旦提交,他所做的修改將會永久的保存在DB?中
NoSQL?非關系型數據庫-->ACID:
英文 | 中文 |
Consistency | 一致性 |
Availability | 可用性 |
Partition tolerance | 分區容錯性 |
·Consistency ???????(一致性)?數據保持一致
●????Availability(可用性)?不能出錯
● ????Partition?????tolerance(分區容錯性)
ACID必須4個條件都滿足,但是NoSQL?只能三選二(上面表格中的三個特性滿足兩個)
5.2?CAP中的3進2
CAP?核心理論:
一個分布式系統不可能同時很好的滿足一致性.可用性和分區容錯性這三個需求,最多滿足兩個?所以,根據該理論將NoSQL分成了三大類
● ??CA原則
單點集群,滿足一致性,可用性的系統,通常在可擴展性上不太強大.
●??CP原?則
滿足一致性.分區容錯性的系統,通常性能不是特別高.
●??AP?原?則
滿足可用性,分區容錯性的系統,通常可能對一致性要求低一些.。
原則 | 適用 |
CA | 傳統Oracle數據庫 |
AP | 大多數網站架構的選擇 |
CP | Redis,Mongodb |
數據庫事務一致性需求
很多web?實時系統并不要求嚴格的數據庫事務,對讀一致性的要求很低,有些場合對寫一致性要求并不高, 允許實現最終一致性.
數據庫的寫實時性與讀實時性需求
對ACID?來說,插入一條數據之后立刻查詢,是肯定可以讀出來這條數據的.但是對于很多?webAPP ?來說,并?不要求這么高的實時性.比方說發一條消息后.過幾秒或十幾秒后.訂閱者才看到這條動態是完全可以接受?的?.
對復雜的SQL查詢,特別是多表關聯查詢的需求
任何大數據量的webAPP,都非常忌諱多個大表的關聯查詢,以及復雜的數據分析類型的報表查詢,特別是??SNS 類型的網站,從需求以及產品設計角度,就避免了這種情況的產生,往往更多的只是表單的主鍵查詢,以?及表單的簡單條件分頁查詢,SQL?的功能被極大的弱化了.
5.3什么是BASE
BASE?是為了解決關系型數據庫強一致性引起的問題而引起的可用性降低而提出的解決方案.
BASE:
中文 | 英文 |
基本可用 | Basically Available |
軟狀態 | Soft?state |
最終一致 | Eventually?consistent |
中?心?:
通過讓系統放松對某一時刻數據一致性的要求來換取系統整體伸縮性和性能上改觀,因為在大型系統往?往由于地域分布和極高性能的要求.不可能采用分布式逗我來完成這些指標,要想獲得這些指標,我們必須?采用別的方式完成,于是BASE出現了?。
5.4分布式與集群
分布式:把一個系統不同模塊的服務分別放在不同臺服務器上,通過API進行通信和調用.對外提供服務和組?內協作?.
集群:在多臺服務器上部署相同的服務模塊.通過分頁式調度軟件進行統一的調度.
6?Redis?入門
6.1?Redis是什么
Redis:REmote?????DIctionary?????Server(遠程字典服務器)
完全開源免費,用C 語言編寫,遵守?BSD 協議,是一個高性能的(Key/value)分布式內存數據庫.基于內存運?行.并支持持久化的NoSQL??數據庫.是當前最熱門的?NoSQL??數據庫之一.也被人們稱作:數據結構服務器?特?點?:
No | Redis特點 |
1 | Resid支持數據的持久化,可以將內存中的數據保持在磁盤中.重啟的時候可以再次加載使用 |
2 | Redis不僅僅支持簡單的Key-Value類型的數據.同時還提供List,set,zset,hash等數據結構的?存儲 |
3 | Resid支持數據的備份,即master-slave模式的數據備份 |
6.2?Redis能做什么
No | 作用 |
1 | 內存存儲和持久化:Redis支持異步將內存中的數據寫到硬盤上,同時不影響繼續服務 |
2 | 取最新N個數據的操作.如:將最新的10條評論的ID放在Redis的List集合里面 |
3 | 模擬類似于HttpSession這種需要設定過期時間的功能 |
4 | 發布,訂閱消息系統 |
5 | 定時器,計數器 |
6.3下載
Redis - The Real-time Data Platform
http://www.redis.cn
6.4 安裝
OS:ubuntu18.04???安裝Redis-Server | 指令: |
| |
安裝Ubuntu?網絡輔助工具 | |
| |
安裝完成通過命令檢查Redis??服務器狀態 | |
| |
通過命令檢查Redis服務器狀態 | |
|