1. 程式人生 > 資料庫 >redis資料庫(一)

redis資料庫(一)

redis資料庫 一

一、Nosql概述

1、為什麼要用Nosql

1.1 單機 MySQL 的美好時代

在90年代,一個網站的訪問量一般都不大,用單個數據庫完全可以輕鬆應付。 在那個時候,更多的都是靜態網頁,動態互動型別的網站不多,資料庫更是沒壓力。
在這裡插入圖片描述

上述架構下,我們來看看資料儲存的瓶頸是什麼?
DAL : Data Access Layer(資料訪問層 – Hibernate,MyBatis)
資料量的總大小一個機器放不下時。 資料的索引(B+ Tree)一個機器的記憶體放不下時。 訪問量(讀寫混合)一個例項不能承受。 如果滿足了上述1 or 3個時,只能對資料庫的整體架構進行重構。

1.2 Memcached(快取)+MySQL+垂直拆分

後來,隨著訪問量的上升,幾乎大部分使用MySQL架構的網站在資料庫上都開始出現了效能問題,web程式不再僅僅專注在功能上,同時也在追求效能。程式設計師們開始大量的使用快取技術來緩解資料庫的壓力,優化資料庫的結構和索引。開始比較流行的是通過檔案快取來緩解資料庫壓力,但是當訪問量繼續增大的時候,多臺web機器通過檔案快取不能共享,大量的小檔案快取也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術產品。
在這裡插入圖片描述
Memcached作為一個獨立的分散式的快取伺服器,為多個web伺服器提供了一個共享的高效能快取服務,在Memcached伺服器上,又發展了根據hash演算法來進行多臺Memcached快取服務的擴充套件,然後又出現了一致性hash來解決增加或減少快取伺服器導致重新hash帶來的大量快取失效的弊端。

1.3 Mysql主從讀寫分離

由於資料庫的寫入壓力增加,Memcached只能緩解資料庫的讀取壓力。讀寫集中在一個數據庫上讓資料庫不堪重負,大部分網站開始使用主從複製技術來達到讀寫分離,以提高讀寫效能和讀庫的可擴充套件性。Mysql的master-slave模式成為這個時候的網站標配了。
在這裡插入圖片描述

1.4 分庫分表+水平拆分+mysql叢集

在Memcached的快取記憶體,MySQL的主從複製,讀寫分離的基礎之上,這時MySQL主庫的寫壓力開始出現瓶頸,而資料量的持續猛增,由於MyISAM在寫資料的時候會使用表鎖,在高併發寫資料的情況下會出現嚴重的鎖問題,大量的高併發MySQL應用開始使用InnoDB引擎代替MyISAM。

ps:這就是為什麼 MySQL 在 5.6 版本之後使用 InnoDB 做為預設儲存引擎的原因 – MyISAM 寫會鎖表,InnoDB 有行鎖,發生衝突的機率低,併發效能高。
在這裡插入圖片描述

同時,開始流行使用分表分庫來緩解寫壓力和資料增長的擴充套件問題。這個時候,分表分庫成了一個熱門
技術,是面試的熱門問題也是業界討論的熱門技術問題。也就在這個時候,MySQL推出了還不太穩定的
表分割槽,這也給技術實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster叢集,但效能也不
能很好滿足網際網路的要求,只是在高可靠性上提供了非常大的保證。

1.5 MySQL的擴充套件性瓶頸

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

1.6 今天是什麼樣子?

在這裡插入圖片描述

最前面的是企業級防火牆,後面通過負載均衡主機(軟負載:Nginx,硬負載:F5)在 web 伺服器叢集
之間進行排程,再由具體的 web 伺服器(Tomcat)去訪問快取,訪問資料庫。

1.7 為什麼用NoSQL?

今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取資料。使用者的個人
資訊,社交網路,地理位置,使用者生成的資料和使用者操作日誌已經成倍的增加。我們如果要對這些使用者
資料進行挖掘,那SQL資料庫已經不適合這些應用了, NoSQL資料庫的發展也卻能很好的處理這些大的
資料。

2、什麼是NoSQL

NoSQL = Not Only SQL (不僅僅是SQL) 關係型資料庫:表格 ,行 ,列
很多的資料型別使用者的個人資訊,社交網路,地理位置。這些資料型別的儲存不需要一個固定的格式!
不需要多月的操作就可以橫向擴充套件的 ! Map<String,Object> 使用鍵值對來控制!
NoSQL,泛指非關係型資料庫,主要分為四大類:

2.1 key-value儲存資料庫。

該類資料庫使用雜湊表,在雜湊表中包含特定的key和與其對應的指向特定資料的指標。常用的有
Redis。

2.2 列儲存資料庫。

該類資料庫主要用來應對分散式儲存的海量資料,一個鍵指向了多個列。常用的有HBase。

2.3 文件型資料庫。

該類資料庫將結構化、半結構化的文件以特定格式儲存,如json格式。一個文件相當於關係型資料庫中
的一條記錄,也是處理資訊的基本單位。常用的有MongoDB。

2.4 圖形資料庫

該類資料庫使用圖形理論來儲存實體之間的關係資訊,最主要的組成部分是:結點集、連線節點的關
系。常用的有Neo4j,朋友圈社交網路,廣告推薦!如脈脈。
非關係型資料庫的特點:
1.資料模型比較簡單。
2.對資料庫效能的要求比較高。
3.不需要高度的資料一致性。