數(shù)據(jù)庫(kù)acid原則 什么是數(shù)據(jù)庫(kù)ACID?
什么是數(shù)據(jù)庫(kù)ACID?事務(wù)在當(dāng)今的企業(yè)系統(tǒng)中無(wú)處不在,即使在高并發(fā)環(huán)境中也可以提供數(shù)據(jù)完整性。事務(wù)是所有成功讀/寫操作的集合。事務(wù)本質(zhì)上有四個(gè)特征:acid:原子性一致性隔離性持久性原子性原子性任務(wù)是
什么是數(shù)據(jù)庫(kù)ACID?
事務(wù)在當(dāng)今的企業(yè)系統(tǒng)中無(wú)處不在,即使在高并發(fā)環(huán)境中也可以提供數(shù)據(jù)完整性。事務(wù)是所有成功讀/寫操作的集合。
事務(wù)本質(zhì)上有四個(gè)特征:acid:
原子性
一致性
隔離性
持久性
原子性
原子性任務(wù)是一個(gè)獨(dú)立的操作單元,它可以是所有原子操作,也可以不是所有原子操作。
一致性
事務(wù)可以封裝狀態(tài)更改(除非它是只讀的)。事務(wù)必須始終保持系統(tǒng)處于一致?tīng)顟B(tài),無(wú)論在任何給定時(shí)間有多少并發(fā)事務(wù)。
一致性具有以下特征:
如果操作觸發(fā)輔助操作(級(jí)聯(lián)、觸發(fā)器),這些操作也必須成功,否則事務(wù)失敗。
如果系統(tǒng)由多個(gè)節(jié)點(diǎn)組成,則一致性要求必須將所有更改傳播到所有節(jié)點(diǎn)(多主機(jī)復(fù)制)。如果從節(jié)點(diǎn)被異步更新,我們打破了一致性規(guī)則,系統(tǒng)就變成了“最終一致性”。
事務(wù)是數(shù)據(jù)狀態(tài)的切換。因此,如果有多個(gè)并發(fā)事務(wù),系統(tǒng)也必須像串行事務(wù)一樣運(yùn)行。
事實(shí)上,當(dāng)事務(wù)系統(tǒng)遇到并發(fā)請(qǐng)求時(shí),這種序列化代價(jià)高昂。Amdahl規(guī)則描述如下:它描述了串行執(zhí)行和并發(fā)之間的關(guān)系。
“在并行計(jì)算中使用多個(gè)處理器的程序的速度由程序的串行執(zhí)行部分的時(shí)間決定?!?/p>
大多數(shù)DBMS選擇(默認(rèn)情況下)放寬一致性以獲得更好的并發(fā)性。
隔離
事務(wù)是一種并發(fā)控制機(jī)制,在交叉執(zhí)行時(shí)提供一致性。隔離允許我們對(duì)外部世界隱藏未提交的狀態(tài)更改。失敗的事務(wù)不應(yīng)破壞系統(tǒng)的狀態(tài)。隔離是通過(guò)使用悲觀或樂(lè)觀鎖定機(jī)制來(lái)實(shí)現(xiàn)的。
持久性
成功的事務(wù)將永久更改系統(tǒng)的狀態(tài),因此導(dǎo)致該狀態(tài)的所有更改都將在事務(wù)結(jié)束前記錄在持久性事務(wù)日志中。如果我們的系統(tǒng)突然遭受系統(tǒng)崩潰或電源故障,那么所有未完成的已提交事務(wù)可能會(huì)重復(fù)發(fā)生。
在大數(shù)據(jù)時(shí)代,關(guān)系型數(shù)據(jù)庫(kù)有哪些缺點(diǎn)?
主要有四個(gè)缺點(diǎn):1。無(wú)法存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)
2。按行存儲(chǔ),即使只操作一列,也需要將整行讀入內(nèi)存
3。表結(jié)構(gòu)擴(kuò)展不方便,模式固定
4。對(duì)全文搜索功能的支持較弱
針對(duì)以上四個(gè)缺點(diǎn),提供了不同的數(shù)據(jù)庫(kù)來(lái)解決。
1. K-V存儲(chǔ)不能存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)
以redis為例,值可以是數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合、sortedset、位圖等。列存儲(chǔ)可以解決在操作HBase
3表示的列
時(shí),將整行讀入內(nèi)存導(dǎo)致的高IO問(wèn)題。文檔存儲(chǔ)可以解決mongodb
4表示的表結(jié)構(gòu)擴(kuò)展不方便的問(wèn)題。全文搜索引擎解決了全文搜索功能的問(wèn)題
以elasticsearch為例
以上解決方案雖然解決了關(guān)系數(shù)據(jù)庫(kù)的不足,但不能很好的支持acid功能。在某些場(chǎng)景下,關(guān)系數(shù)據(jù)庫(kù)是一個(gè)很好的選擇,因此這些數(shù)據(jù)庫(kù)只是關(guān)系數(shù)據(jù)庫(kù)的一個(gè)很好的補(bǔ)充,不能替代關(guān)系數(shù)據(jù)庫(kù)。
現(xiàn)在newsql也是大數(shù)據(jù)時(shí)代的一個(gè)發(fā)展趨勢(shì),即可以支持事務(wù),具有良好的可擴(kuò)展性來(lái)支持大數(shù)據(jù)。以oceanbase、tidb和扳手/F1為例。
國(guó)慶節(jié)當(dāng)天,中國(guó)螞蟻金融自主研發(fā)的金融級(jí)分布式關(guān)系數(shù)據(jù)庫(kù)oceanbase在被稱為“數(shù)據(jù)庫(kù)世界杯”的TPC-C基準(zhǔn)測(cè)試中,打破了美國(guó)甲骨文公司9年來(lái)的世界紀(jì)錄,成為第一個(gè)登上榜首的中文數(shù)據(jù)庫(kù)產(chǎn)品。