(1)Redis - Nosql的概述

1 前提

1.1 單機MySQL的美好年代

在90年代,一個網站的訪問量一般都不大,用單個數據庫完全可以輕鬆應付。
在那個時候,更多的都是靜態網頁,動態交互類型的網站不多。

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。

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

1.5 MySQL的擴展性瓶頸

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

1.6 爲什麼用NoSQL

爲什麼使用NoSQL ?

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

2 Nosql是什麼?

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的數據庫則由於其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題,包括超大規模數據的存儲。

(例如谷歌或Facebook每天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。

3 Nosql能幹嘛?

3.1 易擴展

NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關係數據庫的關係型特性。
數據之間無關係,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。

3.2 大數據量高性能

NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。
這得益於它的無關係性,數據庫的結構簡單。
一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,
在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,
是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了

3.3 多樣靈活的數據模型

NoSQL無需事先爲要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關係數據庫裏,
增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢

3.4 傳統RDBMS VS NOSQL

RDBMS vs NoSQL

RDBMS

  • 高度組織化結構化數據
  • 結構化查詢語言(SQL)
  • 數據和關係都存儲在單獨的表中。
  • 數據操縱語言,數據定義語言
  • 嚴格的一致性
  • 基礎事務

NoSQL

  • 代表着不僅僅是SQL
  • 沒有聲明性查詢語言
  • 沒有預定義的模式
    -鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
  • 最終一致性,而非ACID屬性
  • 非結構化和不可預知的數據
  • CAP定理
  • 高性能,高可用性和可伸縮性

3.5 Redis

4 NoSQL數據模型簡介

以一個電商客戶、訂單、訂購
、地址模型來對比下關係型
數據庫和非關係型數據庫

聚合模型:

  • KV鍵值
  • bson
  • 列族
  • 圖形

5 Nosql數據庫的四大分類

  • KV鍵值:典型介紹
    新浪:BerkeleyDB+redis
    美團:redis+tair
    阿里、百度:memcache+redis

  • 文檔型數據庫(bson格式比較多):典型介紹

  • 列存儲數據庫:

  1. Cassandra, HBase
  2. 分佈式文件系統
  • 圖關係數據庫:
    社交網絡,推薦系統等。專注於構建關係圖譜
    Neo4J, InfoGrid

四者對比

6 在分佈式數據庫中CAP原理CAP+BASE

傳統的ACID分別是什麼
CAP:
CAP的3進2
經典CAP圖
BASE
分佈式+集羣簡介

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