什麼是交易?
交易是一組具有下列屬性的作業:不可部分完成、一致、隔離且持久 (ACID) 。 交易的支援可讓新類型的應用程式開發,同時簡化開發程式,並讓應用程式更強固。 本主題的其餘部分提供示範這些屬性需求的案例,然後是定義每個屬性的資料表。
在 不可部分完成 的作業群組中,群組中的每個作業都必須成功,或所有作業的效果都必須復原 (也稱為 復原) 。 例如,銀行轉移必須是一組不可部分完成的兩項作業:從一個帳戶進行轉帳,以及另一個帳戶的點數。 轉帳和點數必須實作為不可部分完成的群組。 如果這兩個作業都不成功,則轉移會以不公平的方式支援銀行或帳戶持有者。
一致性的需求表示資料在交易之後 (假設我們在交易) 之前以一致的系統開始。 針對銀行轉移範例,一致性可能會定義為將兩個帳戶的合併帳戶餘額定義為常數。 若要在銀行轉移範例中實作一致性,轉帳和點數作業只需要為相同的金額。
另一個交易範例是網站更新。 電子商務網站要求新的產品類別導覽頁面與描述新產品的產品詳細資料頁面完全相同。 在此情況下,需要更新並新增交易控制下的多個目錄專案。 不僅需要讓更新不可部分完成,也需要目前購物的客戶看不到進行中的更新。 這是交易 隔離 屬性的範例。
持久性的 屬性要求在更新完成之後,即使系統停止回應,其效果仍會持續存在。 在上一個範例中,只要確保足夠的資料復原,即可提供持久性,讓所有代表新增產品至網站的新檔案系統專案都會在系統停止回應之後出現。 這需要具有資料備份、復原和高可用性機制的系統。
保證交易的不可部分完成性以及其他屬性,會面臨任何數目的失敗,包括發生于先前失敗的復原階段發生的失敗。 最後,系統會達到兩種狀態的其中一種:所有作業都已套用,或未套用任何作業。
下表摘要說明交易的屬性。
詞彙 | 描述 |
---|---|
原子 |
交易中的所有作業都成功,或沒有任何作業持續存在。 |
一致 |
如果資料在交易開始之前保持一致,則在交易完成之後就會一致。 |
孤立 |
正在進行的交易效果會從所有其他交易中隱藏。 |
耐用 |
當交易完成時,其結果會持續存在,而且會存留系統當機。 |
這些屬性可確保軟體可以處理非預期的錯誤,因為它可以在非預期的情況下中止交易,以避免成功完成。 交易基礎結構可確保中止交易的所有效果都會回復,並將資料傳回一致狀態。 因此,交易式系統會從系統失敗啟用正常復原。
為了保證 ACID 屬性,支援交易的系統必須具備強固的記錄功能,才能視需要認可或回復交易。 如需詳細資訊,請參閱 一般記錄檔系統。