前言
技術的分類
解決功能性的問題
- Java、Jsp、RDBMS、Tomcat、HTML、Linux、Jdbc、SVN
解決擴展性的問題
- Struts、Spring、SpringMVC、Hibernate、Mybatis
解決性能的問題
- NoSQL、Java線程、Hadoop、Nginx、MQ、ElasticSearch
1、Web 1.0 的時代,數據訪問量很有限,用一夫當關的高性能單點服務器可以解決大部分問題。
2、隨着Web2.0的時代的到來,用戶訪問量大幅度提升,同時產生了大量的用戶數據。加上後來的智能移動設備的普及,所有的互聯網平臺都面臨了巨大的性能挑戰。
解決服務器的CPU內存壓力
session存在緩存服務器中,緩存服務器主要把數據存在內存裏面,可以增加讀寫效率。
解決IO壓力
1. NoSQL 數據庫簡介
1.1 NoSQL 數據庫概述
-
NoSQL(NoSQL = Not Only SQL),意即"不僅僅是SQL",泛指非關係型的數據庫。
-
NoSQL 不依賴業務邏輯方式存儲,而以簡單的 key-value 模式存儲。
因此大大的增加了數據庫的擴展能力。
-
不遵循SQL標準。
-
不支持ACID。
-
遠超於SQL的性能。
1.2 NoSQL 適用場景
- 對數據高併發的讀寫
- 海量數據的讀寫
- 對數據高可擴展性的
1.3 NoSQL 不適用場景
- 需要事務支持
- 基於 sql的結構化查詢存儲,處理複雜的關係,需要即席查詢。
用不着sql的和用了sql也不行的情況,請考慮用NoSql
2. 緩存數據庫
2.1 Memcached
- 很早出現的 NoSql 數據庫。
- 數據都在內存中,一般不持久化。
- 支持簡單的 key-value 模式。
- 一般是作爲 緩存數據庫 輔助持久化的數據庫。
2.2 Redis
- 幾乎覆蓋率 Memcached 的絕大部分功能。
- 數據都在內存中,支持持久化,主要用作備份恢復。
- 除了支持簡單的 key-value 模式,還支持多種數據結構的存儲,比如 String、list、set、hash、zset等。
- 一般是作爲 緩存數據庫 輔助持久化的數據庫。
2.3 MongoDB
被稱爲最接近關係型數據庫的非關係型數據庫。
- 高性能、開源、模式自由(schema free)的 文檔型數據庫。
- 數據都在內存中,如果內存不足,MongoDB是一個環形隊列,在往數據庫存數據的時候會把數據放置在一個隊列中,支持先進先出。最先進來的數據先被清除掉。
- 雖然是 key-value 模式,但是對 value(尤其是json)提供把不常用的數據保存到硬盤,豐富的查詢功能。
- 支持二進制數據及大型對象。(比如能直接存圖片)
- 可以根據數據的特點替代 RDBMS,成爲獨立的數據庫。或者配合 RDBMS。
3. 列式數據庫
行式數據庫每次查詢一行,列式數據庫每次查詢一列。
3.1 HBase
- HBase 是 Hadoop 項目中的數據庫。它用於需要對大量的數據進行隨機、實時的讀寫操作的場景中。HBase 的目標就是處理數據量非常龐大的表,可以用普通的計算機處理超過 10 億行數據,還可處理有數百萬元素的數據表。
3.2 Cassandra
- Apache Cassandra 是一款免費的開源NoSQL 數據庫,其設計目的在於管理由大量商用服務器構建起來的龐大集羣上的 海量數據集(數據量通常達到 PB級別,大約等於1000個TB) 。在衆多顯著特性當中,Cassandra 最爲卓越的長處是對寫入及讀取操作進行規模調整,而且其不強調主集羣的設計思路能夠以相對直觀的方式簡化各集羣的創建與擴展流程。