數(shù)據(jù)庫事務(wù)ACID

原子性

整個(gè)事務(wù)中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個(gè)事務(wù)從來沒有執(zhí)行過一樣。

一致性

一個(gè)事務(wù)可以封裝狀態(tài)改變(除非它是一個(gè)只讀的)。事務(wù)必須始終保持系統(tǒng)處于一致的狀態(tài),不管在任何給定的時(shí)間并發(fā)事務(wù)有多少。
也就是說:如果事務(wù)是并發(fā)多個(gè),系統(tǒng)也必須如同串行事務(wù)一樣操作。其主要特征是保護(hù)性和不變性(Preserving an Invariant),以轉(zhuǎn)賬案例為例,假設(shè)有五個(gè)賬戶,每個(gè)賬戶余額是100元,那么五個(gè)賬戶總額是500元,如果在這個(gè)5個(gè)賬戶之間同時(shí)發(fā)生多個(gè)轉(zhuǎn)賬,無論并發(fā)多少個(gè),比如在A與B賬戶之間轉(zhuǎn)賬5元,在C與D賬戶之間轉(zhuǎn)賬10元,在B與E之間轉(zhuǎn)賬15元,五個(gè)賬戶總額也應(yīng)該還是500元,這就是保護(hù)性和不變性。

隔離性

隔離狀態(tài)執(zhí)行事務(wù),使它們好像是系統(tǒng)在給定時(shí)間內(nèi)執(zhí)行的唯一操作。如果有兩個(gè)事務(wù),運(yùn)行在相同的時(shí)間內(nèi),執(zhí)行相同的功能,事務(wù)的隔離性將確保每一事務(wù)在系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)。這種屬性有時(shí)稱為串行化,為了防止事務(wù)操作間的混淆,必須串行化或序列化請(qǐng)求,使得在同一時(shí)間僅有一個(gè)請(qǐng)求用于同一數(shù)據(jù)。

持久性

在事務(wù)完成以后,該事務(wù)對(duì)數(shù)據(jù)庫所作的更改便持久的保存在數(shù)據(jù)庫之中,并不會(huì)被回滾。


image.png

write-ahead logging(WAL)預(yù)寫式日志

預(yù)寫式日志(WAL) 是一種實(shí)現(xiàn)事務(wù)日志的標(biāo)準(zhǔn)方法,很多主流的數(shù)據(jù)庫都是用的這種方法。簡(jiǎn)言之,WAL 就是對(duì)硬盤上的數(shù)據(jù)文件(表和索引)的修改必須只能在這些修改已經(jīng)記錄了日志之后,即在這些新的日志記錄到存儲(chǔ)器(硬盤)之后。 這樣的話我們就不需要在每次事務(wù)提交的時(shí)候都把數(shù)據(jù)頁記錄到磁盤。
這樣的方法能使局部的順序I/O(根據(jù)日志順序地對(duì)各個(gè)表各個(gè)區(qū)域進(jìn)行I/O)取代全局的隨機(jī)I/O(大量并發(fā)的I/O不是針對(duì)同一區(qū)域同一表的)。因?yàn)槲覀冎涝诔霈F(xiàn)崩潰的情況下, 我們可以用日志來恢復(fù)數(shù)據(jù)庫:任何尚未附加到數(shù)據(jù)頁的記錄都將先從日志記錄中重做(這叫向前滾動(dòng)恢復(fù),也叫做 REDO)。

WAL 的中心思想是對(duì)數(shù)據(jù)文件 的修改(它們是表和索引的載體)必須是只能發(fā)生在這些修改已經(jīng) 記錄了日志之后 -- 也就是說,在日志記錄沖刷到永久存儲(chǔ)器之后. 如果我們遵循這個(gè)過程,那么我們就不需要在每次事務(wù)提交的時(shí)候 都把數(shù)據(jù)頁沖刷到磁盤,因?yàn)槲覀冎涝诔霈F(xiàn)崩潰的情況下, 我們可以用日志來恢復(fù)數(shù)據(jù)庫:任何尚未附加到數(shù)據(jù)頁的記錄 都將先從日志記錄中重做(這叫向前滾動(dòng)恢復(fù),也叫做 REDO) 然后那些未提交的事務(wù)做的修改將被從數(shù)據(jù)頁中刪除 (這叫向后滾動(dòng)恢復(fù) - UNDO)。

影子分頁(shadow paging)

In computer science, shadow paging is a technique for providing atomicity and durability (two of the ACID properties) in database systems. A page in this context refers to a unit of physical storage (probably on a hard disk), typically of the order of 1 to 64 KiB.
Shadow paging is a copy-on-write technique for avoiding in-place updates of pages. Instead, when a page is to be modified, a shadow page is allocated. Since the shadow page has no references (from other pages on disk), it can be modified liberally, without concern for consistency constraints, etc. When the page is ready to become durable, all pages that referred to the original are updated to refer to the new replacement page instead. Because the page is "activated" only when it is ready, it is atomic.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容