索引
事務(wù)(transaction)
關(guān)系型數(shù)據(jù)庫(kù)遵循 ACID 規(guī)則
事務(wù)在英文中是transaction毛秘,和現(xiàn)實(shí)世界中的交易很類似饭寺,它有如下四個(gè)特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完叫挟,要么都不做艰匙,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗抹恳,整個(gè)事務(wù)就失敗员凝,需要回滾。
比如銀行轉(zhuǎn)賬奋献,從A賬戶轉(zhuǎn)100元至B賬戶健霹,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶秽荞。這兩步要么一起完成骤公,要么一起不完成,如果只完成第一步扬跋,第二步失敗阶捆,錢會(huì)莫名其妙少了100元。C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫(kù)要一直處于一致的狀態(tài)洒试,事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫(kù)原本的一致性約束倍奢。
例如現(xiàn)有完整性約束a+b=10,如果一個(gè)事務(wù)改變了a垒棋,那么必須得改變b卒煞,使得事務(wù)結(jié)束后依然滿足a+b=10,否則事務(wù)失敗叼架。I (Isolation) 獨(dú)立性
所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響畔裕,如果一個(gè)事務(wù)要訪問的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交乖订,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響扮饶。
比如現(xiàn)在有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個(gè)交易還未完成的情況下乍构,如果此時(shí)B查詢自己的賬戶甜无,是看不到新增加的100元的。D (Durability) 持久性
持久性是指一旦事務(wù)提交后哥遮,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫(kù)上岂丘,即使出現(xiàn)宕機(jī)也不會(huì)丟失。
NoSQL
NoSQL眠饮,指的是非關(guān)系型的數(shù)據(jù)庫(kù)奥帘。NoSQL有時(shí)也稱作Not Only SQL的縮寫,是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱君仆。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)翩概。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式返咱,無需多余操作就可以橫向擴(kuò)展钥庇。
RDBMS vs NoSQL
RDBMS
- 高度組織化結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化查詢語(yǔ)言(SQL) (SQL)
- 數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中。
- 數(shù)據(jù)操縱語(yǔ)言咖摹,數(shù)據(jù)定義語(yǔ)言
- 嚴(yán)格的一致性
- 基礎(chǔ)事務(wù)
NoSQL
- 代表著不僅僅是SQL
- 沒有聲明性查詢語(yǔ)言
- 沒有預(yù)定義的模式
-鍵 - 值對(duì)存儲(chǔ)评姨,列存儲(chǔ),文檔存儲(chǔ)萤晴,圖形數(shù)據(jù)庫(kù) - 最終一致性吐句,而非ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
- CAP定理
- 高性能,高可用性和可伸縮性
sql數(shù)據(jù)庫(kù)在建表時(shí)就得把表結(jié)構(gòu)和數(shù)據(jù)類型限制死店读。nosql像mongodb這種嗦枢,不用每個(gè)document的數(shù)據(jù)結(jié)構(gòu)都可以不一樣。而且mongodb數(shù)據(jù)庫(kù)一開始就是為了適應(yīng)搜索引擎的高并發(fā)讀寫而開發(fā)的屯断,所以讀寫效率更高文虏。mongodb的id值是一大串字符侣诺,更適合做分布式開發(fā),sql數(shù)據(jù)庫(kù)的事物鎖功能可以提供方便的原子化操作,而mongodb的原子性操作則比較麻煩氧秘。
NoSQL的優(yōu)點(diǎn)/缺點(diǎn)
優(yōu)點(diǎn):
- 高可擴(kuò)展性
- 分布式計(jì)算
- 低成本
- 架構(gòu)的靈活性年鸳,半結(jié)構(gòu)化數(shù)據(jù)
- 沒有復(fù)雜的關(guān)系
缺點(diǎn):
- 沒有標(biāo)準(zhǔn)化
- 有限的查詢功能(到目前為止)
- 最終一致是不直觀的程序
CAP定理(CAP theorem)
在計(jì)算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來說,不可能同時(shí)滿足以下三點(diǎn):
- 一致性(Consistency) (所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù))
- 可用性(Availability) (保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng))
- 分隔容忍(Partition tolerance) (系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作)
CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性丸相,可用性和分區(qū)容錯(cuò)性這三個(gè)需求搔确,最多只能同時(shí)較好的滿足兩個(gè)。
因此灭忠,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫(kù)分成了滿足 CA 原則膳算、滿足 CP 原則和滿足 AP 原則三大類:
- CA - 單點(diǎn)集群,滿足一致性更舞,可用性的系統(tǒng)畦幢,通常在可擴(kuò)展性上不太強(qiáng)大。
- CP - 滿足一致性缆蝉,分區(qū)容忍性的系統(tǒng),通常性能不是特別高瘦真。
-
AP - 滿足可用性刊头,分區(qū)容忍性的系統(tǒng),通持罹。可能對(duì)一致性要求低一些原杂。
CAP Theorem.png