事務處理

引子

最近看一些文章的時候,看到事務的概念,只記得在很早的時候接觸過,想不起來有什麼用,查詢了資料後發現仍是挺有用的。git

介紹

事務處理(Transaction processing)是計算機科學中的信息處理,它被分紅單個不可分割的操做,稱爲事務(transaction)。每一個事務做爲一個完整的單元必須成功或者失敗,毫不可能部分完成。事務處理經過確保系統上相互依賴的操做,所有成功完成或者所有成功取消,在已知的一致狀態上維持系統的完整性。github

舉個例子,一個典型的銀行交易:將 100 從客戶的儲蓄帳戶轉移到客戶的支票帳戶。這個交易涉及至少 2 個獨立的操做:借記儲蓄賬戶 100,記入支票帳戶 100。若是一個操做成功,另一個操做失敗,銀行的帳簿最後會不平衡。這裏必需要有一個方式去保證全部操做都成功或都失敗,這樣在銀行的整個數據庫中才不會先後矛盾。數據庫

在事務中連接了多個操做時,確保全部的操做沒有錯誤的完成,或者都失敗。若是其中的一些操做完成但在嘗試其它操做時發生了錯誤,則事務處理系統會「回滾(rolls back)」 事務的全部操做(包括已經成功的操做),從而消除事務的全部痕跡,並將系統恢復處處理事務開始以前所處的一致的已知狀態。若是一個事務的全部操做都成功的完成,這個事務會被系統提交(committed),全部對數據庫的更改將會是永久性的,一旦事務完成不能被回滾。編程

一般,事務是同時發佈的,若是它們重疊,可能會產生衝突。例如一個客戶的儲蓄帳戶上有 150,嘗試轉帳給另一我的 100,同時轉移 100 到支票帳戶,那麼只有其中的一個能夠成功。然而,強制事務按照順序執行是低效的。所以事務處理的併發編程實現,保證最終結果沒有衝突,與任何順序執行事務時達到的結果相同。在這個例子中,這就意味着無論那個事務先發布,不管是先轉帳給另一我的仍是轉移到支票帳戶成功了,另一個操做就會失敗。併發

方法

全部事務處理系統的基本原則都同樣。然而,術語可能因事務處理系統而異,下面使用的術語不必定通用。atom

Rollback

事務處理系統經過在修改數據庫時,記錄數據庫的中間狀態來確保數據庫完整性,而後若是一個事務沒法提交,使用這些記錄將數據庫恢復到已知狀態。日誌

Rollforward

能夠保留對數據庫管理系統的全部修改的單獨日誌。這個對回滾並不須要,但在數據庫發生故障時更新數據管理系統頗有用,所以有些事務處理系統提供這個功能。若是數據庫管理系統徹底失敗,則必須從最近的備份中恢復。備份不會反映自備份以來所提交的事務。可是,一旦數據庫管理系統恢復了,就能夠將日誌應用於數據庫(rollforward)以使數據庫管理系統保持最新。事務

Deadlock

在一些狀況下,兩個事務可能在處理的過程當中,同時嘗試訪問數據庫的同一部分,從而阻止它們繼續運行。例如,事務 A 訪問了數據庫的 X ,事務 B 訪問了數據庫的 Y。若是此時,事務 A 嘗試訪問數據庫的 Y ,事務 B 嘗試訪問數據庫的 X , 則一個死鎖(Deadlock)產生了,而且兩個事務都不能繼續下去。ip

事務處理系統旨在檢測這些死鎖什麼時候發生。一般,兩個事務都將被取消並回滾,而後它們將以不一樣的順序自動再次啓動,以便再也不發生死鎖。或者有些時候,只有其中的一個死鎖事務將會被取消和回滾,在短暫的延遲後自動重啓。ci

死鎖可能涉及 3 個或更多的事務。涉及的事務越多,它們檢測的難度就越大,所以事務處理系統能夠檢測到的死鎖,在實際中是有限制的。

Compensating transaction

在提交和回滾機制不可用或不指望的系統中,補償事務常常用來撤銷失敗的事務,而且將系統恢復到以前的狀態。

ACID 標準

Jim Gray 在 20 世紀 70 年代定義了一個可靠事務系統的特質,縮寫爲 ACID —— atomicity(原子性)、consistency(一致性)、 isolation(獨立性)、durability(耐久性) 。

Atomicity

事務對狀態的改變是原子的:要麼所有發生,要麼都不發生。

Consistency

一個事務是狀態的一種正確轉換。做爲一組採起的行爲不違反跟狀態相關的任何完整性的約束。

Isolation

即便事務併發執行,對於每一個事務 T ,其餘事務看起來在 T 以前或 T 以後執行,但不是二者同時執行。

Durability

一旦事務成功完成(提交),它對數據庫的更改,將在數據庫失敗後繼續存在並保留其更改。

優勢

事務處理有下面的優勢:

  • 它容許用戶之間共享計算機資源
  • 它將做業處理的時間合理轉換
  • 它避免了在沒有人工交互和監督的狀況下閒置計算資源
  • 它被用在昂貴的計算機上,經過保持對這些昂貴資源的高利用率來幫助分攤成本

缺點

事務處理有下面的缺點:

  • 它們具備相對昂貴的設置成本
  • 缺少標準的格式
  • 硬件和軟件不兼容

參考資料

相關文章
相關標籤/搜索