Redis學習筆記(1)—— Redis簡介
一、NoSQL概述
1.1 什麼是NoSQL
NoSQL(NoSQL = Not Only SQL),意指“不僅僅是SQL”,是一項全新的資料庫理念,泛指非關係型的資料庫。
1.2 為什麼需要NoSQL
隨著網際網路web2.0網站的興起,非關係型的資料庫成了一個極其熱門的新領域,非關係型資料庫產品的發展非常迅速,而傳統的關係資料庫在應付web2.0網站,特別是超大規模和高併發的SNS型別的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,例如:
- High performance – 對資料庫高併發讀寫的需求
web2.0網站要根據使用者個性化資訊來實時生成動態頁面和提供動態資訊,所以基本上無法使用動態頁面靜態化技術,因此資料庫併發負載非常高,往往要達到 每秒上萬次讀寫請求。關係資料庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫資料請求,硬碟IO就已經無法承受了。
其實對於普通的BBS網 站,往往也存在對高併發寫請求的需求,例如像JavaEye網站的實時統計線上使用者狀態,記錄熱門帖子的點選次數,投票計數等,因此這是一個相當普遍的需 求。
- Huge Storage – 對海量資料的高效率儲存和訪問的需求
類似Facebook,twitter,Friendfeed這樣的SNS網站,每天使用者產生海量的使用者動態,以Friendfeed為例,一個月就達到 了2.5億條使用者動態,對於關係資料庫來說,在一張2.5億條記錄的表裡面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的使用者登 錄系統,例如騰訊,盛大,動輒數以億計的帳號,關係資料庫也很難應付。
- High Scalability && High Availability- 對資料庫的高可擴充套件性和高可用性的需求
在基於web的架構當中,資料庫是最難進行橫向擴充套件的,當一個應用系統的使用者量和訪問量與日俱增的時候,你的資料庫卻沒有辦法像web server和app server那樣簡單的通過新增更多的硬體和服務節點來擴充套件效能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴充套件 是非常痛苦的事情,往往需要停機維護和資料遷移,為什麼資料庫不能通過不斷的新增伺服器節點來實現擴充套件呢?
NoSQL資料庫的產生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題。】
1.3 主流NoSQL產品
NoSQL資料庫的四大分類:
- 鍵值(Key-Value)儲存資料庫
相關產品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型應用:內容快取,主要用於處理大量資料的高訪問負載
資料模型:一系列鍵值對
優勢:快速查詢
劣勢:儲存的資料缺少結構化
- 列儲存資料庫
相關產品:Cassandra,HBase,Riak
典型應用:分散式的檔案系統
資料模型:以列簇式儲存,將同一列資料存在一起
優勢:查詢速度快,可擴充套件性強,更容易進行分散式擴充套件
劣勢:功能相對侷限
- 文件型資料庫
相關產品:CouchDB、MongoDB
典型應用:Web應用(與Key-Value類似,Value是結構化的)
資料模型:一系列鍵值對
優勢:資料結構要求不嚴格
劣勢:查詢效能不高,而且缺乏統一的查詢語法
- 圖形(Graph)資料庫
相關產品:Neo4J、InfoGrid、Infinite Graph
典型應用:社交網路
資料模型:圖結構
優勢:利用圖結構相關演算法
劣勢:需要對整個圖做計算才能得出結果,不容易做分散式的叢集方案
1.4 NoSQL的特點
在大資料儲存上具備關係型資料庫無法比擬的效能優勢,例如:
- 易擴充套件
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關係資料庫的關係型特性。資料之間無關係,這樣就非常容易擴充套件。也無形之間,在架構的層面上帶來了可擴充套件的能力
- 大資料量,高效能
NoSQL資料庫都具有非常高的讀寫效能,尤其在大資料量下,同樣表現優秀。這得益於它的無關係性,資料庫的結構簡單。
-
靈活的資料模型
NoSQL無需事先為要儲存的資料建立欄位,隨時可以儲存自定義的資料格式。而在關係資料庫裡,增刪欄位是一件非常麻煩的事情。如果是非常大資料量的表,增加欄位簡直就是一個噩夢。這點在大資料量的web2.0時代尤其明顯。
- 高可用
NoSQL在不太影響效能的情況,就可以方便的實現高可用的架構。
1.5 關係型資料庫(Oracle、MySQL)和非關係型(NoSQL)資料庫的區別
關係型資料庫通過外來鍵關聯來建立表與表之間的關係。
非關係型資料庫通常指資料以物件的形式儲存在資料庫中,而物件之間的關係通過每個物件自身的屬性來決定。
比如 有一個學生的資料:姓名:張三,性別:男,學號:12345,班級:二年級一班
還有一個班級的資料: 班級:二年級一班,班主任:李四
關係型資料庫中,我們建立學生表和班級表來存這兩條資料,並且學生表中的班級儲存的是班級表中的主鍵。
非關係型資料庫中,我們建立兩個物件,一個是學生(Student)物件,一個是班級(Grade)物件。通過設定Student類的classid等於Grade類的id來建立這種關係;
資料庫型別 |
特性 |
優點 |
缺點 |
---|---|---|---|
關係型資料庫 |
1、關係型資料庫,是指採用了關係模型來組織 資料的資料庫; 2、關係型資料庫的最大特點就是事務的一致性; 3、簡單來說,關係模型指的就是二維表格模型, 而一個關係型資料庫就是由二維表及其之間 的聯絡所組成的一個數據組織。 |
1、容易理解:二維表結構是非常貼近邏輯世界一個概念,關係模型相對網狀、層次等其他模型來說更容易理解; 2、使用方便:通用的SQL語言使得操作關係型資料庫非常方便; 3、易於維護:豐富的完整性(實體完整性、參照完整性和使用者定義的完整性)大大減低了資料冗餘和資料不一致的概率; 4、支援SQL,可用於複雜的查詢。 |
1、為了維護一致性所付出的巨大代價就是其讀寫效能比較差; 2、固定的表結構; 3、高併發讀寫需求; 4、海量資料的高效率讀寫; |
非關係型資料庫 |
1、使用鍵值對儲存資料; 2、分散式; 3、一般不支援ACID特性; 4、非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合。 |
1、無需經過sql層的解析,讀寫效能很高; 2、基於鍵值對,資料沒有耦合性,容易擴充套件; 3、儲存資料的格式:nosql的儲存格式是key,value形式、文件形式、圖片形式等等,文件形式、圖片形式等等,而關係型資料庫則只支援基礎型別。 |
1、不提供sql支援,學習和使用成本較高; 2、無事務處理,附加功能bi和報表等支援也不好; |
二、Redis概述
參考資料:http://www.cnblogs.com/wuyepeng/p/9744393.html