1.1 技術發展 redis是用來解決性能問題的資料庫 技術的分類: 解決功能性問題:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 解決擴展性問題:Struts、Spring、SpringMVC、Hibernate、Mybatis 解決性能問題:NoSQL、Ja ...
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,存儲特定的數據
- 高性能、開源、模式自由的