1.1 技術發展
redis是用來解決效能問題的資料庫
技術的分類:
- 解決功能性問題:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
- 解決擴充套件性問題:Struts、Spring、SpringMVC、Hibernate、Mybatis
- 解決效能問題:
NoSQL
、Java執行緒、Hadoop、Nginx、MQ、ElasticSearch
1.1.1 Web1.0時代
在Web1.0時代,資料訪問量很有限,用一夫當關的高效能的單點伺服器可以解決大部分問題。
1.1.2 Web2.0時代
隨著Web2.0的時代的到來,使用者訪問量大幅度提升,同時產生了大量的使用者資料。加上後來的智慧移動裝置的普及,所有的網際網路平臺都面臨了巨大的效能挑戰。如果我們依然使用單體的架構服務,那麼伺服器無法承受大量使用者的訪問,會導致伺服器的CPU有很大的壓力,並且資料庫有IO壓力。
1.1.3 解決CPU及記憶體壓力
問題:session我們儲存在哪?
-
儲存在cookie中
缺點:cookie一般儲存在客戶端中,所以不安全 -
儲存在檔案伺服器或者資料庫裡
缺點:會有大量的IO效率問題 -
session複製,使用者一開始訪問,伺服器A儲存了使用者的資訊,第二次使用者訪問的時候,請求走向了伺服器B,但此時session在伺服器A上,所以就將session複製一份給伺服器B即可
缺點:session資料冗餘,節點越多越浪費 -
儲存在快取資料庫中
優點:完全儲存在記憶體中,讀取速度更快,資料結構簡單
1.1.4 解決IO壓力
當你資料庫中的資料越來越多,那麼一般你就會使用分庫分表的技術,但是它會破壞一定的業務邏輯來換取效能,它不是最好的處理方式,我們可以把頻繁查詢的資料放入快取資料庫中,它能極大的提高你的查詢速度,減少io的讀操作。
1.2 NoSQL
1.2.1 NoSQL資料庫概述
NoSQL(Not Only SQL),意思是"不僅僅是SQL",泛指非關係型資料庫
。
NoSQL不依賴業務邏輯方式儲存,而是以簡單的key-value
模式儲存。因此大大的增加了資料庫的擴充套件能力。
它有以下特性:
- 不遵循SQL標準
- 不支援ACID
- 遠超SQL的效能
1.2.2 NoSQL適用場景
- 對資料高併發的讀寫
- 海量資料的讀寫
- 對資料高可擴充套件性的
1.2.3 NoSQL不適用場景
- 需要事務支援
- 基於sql的結構化查詢儲存,處理複雜的關係,需要
即席
查詢
總結:用不著SQL和用了SQL也解決不了的情況,請考慮使用NoSQL
1.2.4 常見的NoSQL資料庫
- Memcache
- 很早出現的NoSQL資料庫
- 資料都在記憶體中,一般不持久化
- 支援簡單的key-value模式,支援型別單一
- 一般是作為
快取資料庫
輔助持久化的資料庫
- Redis
- 幾乎覆蓋了Memcached的絕大部分功能
- 資料都在記憶體中,支援持久化,主要用作備份恢復
- 除了支援簡單的key-value模式,還支援多種資料結構的儲存,比如list、set、hash、zset等
- 一般是作為
快取資料庫
輔助持久化的資料庫
- MongoDB
- 高效能、開源、模式自由的
文件型資料庫
- 資料都在記憶體中,如果記憶體不足,把不常用的資料儲存到硬碟中
- 雖然是key-value模式,但是對value(尤其是
json
)提供了豐富的查詢功能 - 支援二進位制資料及大型物件
- 可以根據資料的特點替代RDBMS,成為獨立的資料庫。或者配合RDBMS,儲存特定的資料
- 高效能、開源、模式自由的