Redis學習(一)---------nosql入門和概述

一、什麼是nosql?
NoSql(Nosql=not Only SQL),意思是“不僅僅是SQL”,泛指非關係型數據庫。隨着web2.0的快速發展,傳統的關係型數據庫在應對web2.0存動態網站已經顯得力不從心,暴露了跟多難以解決的問題,而非關係型、分佈式數據存儲得到了快速的發展。

二、傳統關係型數據庫的美好時代到瓶頸

傳統的關係型數據庫具有不錯的性能,高穩定性,久經歷史考驗,而且功能簡單,功能強大。
在90年代,一個網站的訪問量一般都不大,用單個數據庫完全可以輕鬆應對。在那個時候,更多都是靜態的網頁,動態交互類型網站並不多。

三、Memcached(緩存)+MYSQL+垂直拆分

後來隨着訪問量的不斷上升,幾乎大部分使用MySQL架構的網站在數據庫上都出現了性能問題,web程序不在僅僅專注於功能上,同時也在追求性能。程序員們開始使用緩存技術來緩解數據庫的壓力,優化數據庫的結構和索引。開始比較流行的是通過緩存文件來緩解數據的壓力,但是當訪問量繼續增大的時候,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶來了比較高的IO壓力。在這個時候,Memcached就自然的成爲一個非常時尚的技術產品。
Memcached作爲一個獨立的分佈式的緩存服務器,爲多個web服務器提供了一個共享的高性能緩存服務,在Memcached服務器上,又發展了根據hash算法來進行多臺Memcached緩存服務的擴展,然後出現一致性hash來解決增加或減少緩存服務導致重新hash帶來的大量緩存失效的弊端。

四、MySQL主從讀寫分離

由於數據庫的寫入壓力增加,Memcached只能緩解數據庫的讀取壓力。讀寫集中在一個數據庫上讓數據庫不堪重負,大部分網站開始使用主從複製技術來達到讀寫分離,以提高讀寫性能和讀庫的擴展性。MySQL的master-salve模式成爲這個時候的網站標配了。

五、分庫分表+水平拆分+MySQL集羣

在Memcached的高速緩存,MySQL的主從複製,讀寫分離之上,這時MySQL主庫的寫壓力開始出現瓶頸,而數據量的持續猛增,由於MyISAM使用表鎖,在高併發下會出現嚴重的鎖問題,大量的高併發MySQL應用開始使用InnoDB引擎代替MyISAM。
同時開始使用分庫分表來緩解寫壓力和數據增長的擴展問題。這個時候,分表分庫成了一個熱門技術。也在這個時候,MySQL推出了還不太穩定的表分區,這也給技術實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集羣,但性能也不能很好滿足互聯網的要求,只是在可靠性上提供了非常大的保證。

六、MySQL擴展瓶頸

MySQL數據庫也經常存儲一些大文本字段,導致數據庫表非常的大,在做數據庫恢復的時候就導致非常的慢,不容易快速恢復數據庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數據從MySQL省去,MySQL將變得非常的小。關係數據庫很強大,但是它並不能很好的應付所有的應用場景。MySQL的擴展性差(需要複雜的技術來實現),大數據下IO壓力大,表結構更改困難,正是當前使用MySQL的開發人員面臨的問題。

七、NoSql的優勢
<1>易擴展
NoSql數據庫種類繁多,但是一個共同的特點都是去掉關係型數據庫的關係型特性。數據間無關係,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
<2>大數據量,高性能
NoSQL 數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,數據庫的結構簡單。一般 MySQL 使用 Query Cache,每次表的更新 Cache 就失效,是一種大粒度的 Cache,在針對 web2.0 的交互頻繁的應用,Cache 性能不高。而 NoSQL 的 Cache 是記錄級的,是一種細粒度的 Cache,所以 NoSQL 在這個層面上來說就要性能高很多了。
<3>靈活的數據模型
NoSQL 無需事先爲要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關係數據庫裏,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。這點在大數據量的 web2.0 時代尤其明顯。
<4>高可用
NoSQL 在不太影響性能的情況,就可以方便的實現高可用的架構。比如 Cassandra,HBase 模型,通過複製模型也能實現高可用

參考
(https://infoq.cn/article/2011/01/nosql-why)
(https://baike.baidu.com/item/NoSQL/8828247?fr=aladdin)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章