【事務】特性、安全保障及實現

事務是一個常見的概念,是對程序運行時異常數據處理的抽象,把多個讀寫規則抽象成一個操做單元,要麼所有成功(commit),要麼所有失敗(rollback);失敗後能夠安全地重試。事務使程序無需關心繫列操做部分失敗的狀況,可是否須要事務、如何作事務的併發處理,須要對其有深刻理解。數據庫

ACID特性

原子性(Atomicity)

原子是化學中的概念,指沒法再切分的粒度。在多線程中,一個線程執行原子操做,指操做的中間態對其餘線程不可見;這和事務中的隔離性類型。安全

事務的原子性指:要麼全作,要麼全不作;在錯誤時停止,能夠撤銷已經完成的修改。多線程

一致性(Consistency)

一致性比原子性有更多的含義:數據副本的一致性、分區的一致性哈希、CAP的線性化。併發

事務的一致性:的一組特定陳述必須始終成立,即不變量。性能

例如,一個借貸系統中,初始借款和放貸金額始終相等;在一系列還款再放貸後的事務操做後,這個等式依舊成立。spa

一致性的條件是由業務邏輯維護的,由原子性保障實現的。假設貸方帳戶有1000元,業務代碼扣掉這1000元,並打給借方帳戶1100元,一致性就被破壞了。線程

事務是數據庫提供的特性,因此事務的特性應當是描述數據庫自己提供的能力、而非對使用方的約束規範:喬·海勒斯坦(Joe Hellerstein)指出,在論Härder與Reuter的論文中,「ACID中的C」是被「扔進去湊縮寫單詞的」,並且那時候你們都不怎麼在意一致性。事務

隔離性(Isolation)

隔離性相似上文提到的多線程原子操做。數據庫一般是併發訪問的,併發事務也可能操做相同的記錄。ci

事務相互隔離,不會相互冒犯(不能冒犯相對於不可見、不可執行是更廣義的隔離,因此有多種事務隔離級別)。狹義的事務隔離性指可序列化,但可序列化會有很大的性能損失。it

不一樣事物隔離級別的隔離性也不同,下文會重點討論。

持久性(Durability)

持久化是存儲系統對業務的承諾,事務的持久性指:一旦commit,寫入的數據不會丟失。

沒有絕對的持久性,例如全部副本的硬盤都毀掉時。

相關文章
相關標籤/搜索