「ACID特性」を聞いたことがあっても、「なんだっけ?」という方のために、今回は、銀行の預金口座からACID特性の重要性を勉強していきます。
ACID特性とは
ACID特性とは、関連する複数の処理を一つの処理単位にまとめて管理するトランザクション処理に求められる4つの特性。“Atomicity”(原子性)、“Consistency” (一貫性)、“Isolation”(独立性)、“Durability”(耐久性)の頭文字をつなぎ合わせたもの。
ACID特性 原子性
上の図は、銀行振込みの中身の処理を仮定した図です。
1.A銀行からB銀行に振込み処理 (5万円の振込み)
2.A銀行口座の5万円減算処理
結果:A銀行口座が20万円から15万円になる
銀行振込は、B銀行に振込分の金額を送信した後、A銀行の口座残高を振込分減らしています。
仮に、システム障害により「1の処理だけで終わり、2が実行されなかったら?」
銀行口座のお金がずれてしまい大問題です。
これを原子性の欠如といいます。 原子性は最後まで行うか、なにもしないかのいずれかになることを保証します。
ACID特性 一貫性
銀行振り込みで5万円振り込んだはず。
A銀行の口座残高は5万円減っているのに、B銀行には1万円しか振り込まれていない。
4万円はどこへ?
これを一貫性の欠如と言います。一貫性は処理の前後でデータの整合性が保たれて矛盾がないことを保証します。
ACID特性 独立性
会社からの給料入金と銀行振込を同時に行ったとします。タイミング悪く、今の預金残高を同時に読み取ってしまったら? 最後に書き込んだ記録が有効になってしまい、給料の入金がなかったことになってしまいます。
これが独立性の欠如です。 独立性は複数の処理の影響を受けないことを保証します。実際のシステムでは、同時に行うと影響が出る処理があれば片方の処理を待たせるようにします。