1、入門概述
(1)為什麼用 NoSQL
下面按順序逐漸演進!!!
I、單機 MySQL
II、Memcached(緩存) + MySQL + 垂直拆分
III、MySQL 主從讀寫分離
IV、分表分庫 + 水準拆分 + MySQL 叢集
V、MySQL 的擴充性瓶頸
VI、今天是什麼樣子
VII、為什麼使用 NoSQL
(2)NoSQL 是什麼
(3)NoSQL 能幹嘛
- 易擴充:NoSQL 資料庫種類繁多,但是一個共同的特點都是去掉關系資料庫的關系型特性,資料之間無關系,這樣就非常容易擴充。也無形之間,在架構的層面上帶來了可擴充的能力。
- 大資料量高性能:NoSQL 資料庫都具有非常高的讀寫性能,尤其在大資料量下,同樣表現優秀。這得益于它的無關系性,資料庫的結構簡單。一般 MySQL 使用 Query Cache,每次表的更新 Cache 就失效,是一種大粒度的 Cache,在針對 web2.0 的互動頻繁的應用,Cache 性能不高。而 NoSQL 的 Cache 是記錄級的,是一種細粒度的 Cache,是以 NoSQL 在這個層面上來說就要性能高很多了。
-
多樣靈活的資料模型:NoSQL 無需事先為要存儲的資料建立字段,随時可以存儲自定義的資料格式。而在關系資料庫裡,
增删字段是一件非常麻煩的事情。如果是非常大資料量的表,增加字段簡直就是一個噩夢。
- 傳統 RDBMS VS NOSQL:
- RDBMS
- 高度組織化結構化資料
- 結構化查詢語言(SQL)
- 資料和關系都存儲在單獨的表中。
- 資料操縱語言,資料定義語言
- 嚴格的一緻性
- 基礎事務
- NoSQL
- 代表着不僅僅是 SQL
- 沒有聲明性查詢語言
- 沒有預定義的模式
- 鍵 - 值對存儲,列存儲,文檔存儲,圖形資料庫
- RDBMS
(4)常見的 NoSQL 資料庫
- Redis
- Memcache
- MongDB
2、3 V + 3 高
(1)大資料時代的 3 V
- 海量 Volume
- 多樣 Variety
- 實時 Velocity
(2)網際網路需求的 3 高
- 高并發
- 高可用
- 高性能
3、NoSQL 資料模型簡介
(1)聚合模型
- key - value 鍵值
- Bson
- 列族
- 圖形
4、NoSQL 資料庫的四大分類
(1)key - value 鍵值
- 新浪:BerkeleyDB + redis
- 美團:redis + tair
- 阿裡、百度:memcache + redis
(2)文檔型資料庫(Bson 格式比較多)
- CouchDB
- MongoDB
(3)列存儲資料庫
- Cassandra, HBase
- 分布式檔案系統
(4)圖關系資料庫
- 朋友圈、社交網絡、廣告推薦
- Neo4J, InfoGrid
(5)四者對比
5、在分布式資料庫中 CAP 原理 + Base
(1)傳統的 ACID
- A (Atomicity) 原子性:原子性很容易了解,也就是說事務裡的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裡的所有操作都成功,隻要有一個操作失敗,整個事務就失敗,需要復原。
- C (Consistency) 一緻性:一緻性也比較容易了解,也就是說資料庫要一直處于一緻的狀态,事務的運作不會改變資料庫原本的一緻性限制。
- I (Isolation) 隔離性:所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要通路的資料正在被另外一個事務修改,隻要另外一個事務未送出,它所通路的資料就不受未送出事務的影響。
- D (Durability) 持久性:持久性是指一旦事務送出後,它所做的修改将會永久的儲存在資料庫上,即使出現當機也不會丢失。
(2)CAP
- C:Consistency(強一緻性)
- A:Availability(可用性)
- P:Partition tolerance(分區容錯性)
(3)CAP 的 3 進 2
CAP理論就是說在分布式存儲系統中,最多隻能實作上面的兩點。而由于目前的網絡硬體肯定會出現延遲丢包等問題,是以分區容忍性是我們必須需要實作的。
是以我們隻能在一緻性和可用性之間進行權衡,沒有 NoSQL 系統能同時保證這三點。