為了保證系統中所有數據都是符合一致性(Consistency),欲達成該目標,需要三方來保障:
作者認為,A、I、D 是手段,C 是目的。
以下會根據不同服務數量與不同資源數量的場景,介紹對應的事務處理手段:
單一服務 | 多個服務 | |
---|---|---|
單一資料來源 | 本地事務 | 共享事務 |
多個資料來源 | 全域事務 | 分散式事務 |
寫入中間狀態與崩潰都是無法避免的,為了確保原子性和持久性,只能在崩潰後採取補救措施。為了崩潰恢復,主流一般採取“提交日誌 Commit Logging”來實作。
還有另一種稱為“Shadow Paging”的事務實作機制,實作相對簡單,但迸發能力相對有限
但「對所有資料的修改都必須發生在交易提交之後」為其缺陷,對此有了“Write-Ahead Logging”的改進方案,所謂提前寫入“Write-Ahead”就是允許在交易提交前寫入變動資料。
何時寫入變動數據會依照事務提交時點為界,分為 FORCE 和 STEAL 兩種情況:
資料庫按照是否允許 FORCE 和 STEAL 可以產生四種組合,NO-FORCE 加STEAL 組合的性能最高,複雜度也是最高: