ACID特性は、トランザクションを信頼できる処理単位として扱うための4つの性質です。原子性・一貫性・隔離性・永続性を、振込の例で区別して理解しましょう。
一連の変更をひとまとまりにする
A口座から1万円を減らし、B口座へ1万円を増やす処理を考えます。片方だけ反映すると、残高の合計が変わってしまいます。この2つを1つのトランザクションとして扱い、成功ならCOMMIT(確定)、失敗ならROLLBACK(取消し)を行います。
| 性質 | 意味 | 振込の例 |
|---|---|---|
| A:Atomicity(原子性) | 全部反映するか、変更を全部取り消す | 片方の口座だけ変更された状態を残さない |
| C:Consistency(一貫性) | 正しい状態から、ルールを満たす正しい状態へ移る | 残高の合計や定義した制約を保つ |
| I:Isolation(隔離性・独立性) | 同時実行による影響を制御する | 他の処理に途中の不適切な状態を見せない |
| D:Durability(永続性・耐久性) | 確定した結果を障害後も保持する | COMMITした振込結果を復旧できる |
原子性と永続性の違い
原子性は「途中で失敗した処理をどう扱うか」、永続性は「確定した結果をどう残すか」に注目します。ROLLBACKで未確定の変更を取り消すことと、障害復旧で確定済みの結果を残すことを分けて覚えましょう。
隔離性は分離レベルと合わせて考える
最も厳格なSerializableでは、同時実行した結果が、何らかの順序で1件ずつ実行した結果と同じになることを求めます。実際のDBには複数の分離レベルがあります。「他のトランザクションの結果は永久に見えない」という意味ではありません。
一貫性は業務ルールも必要
DBの制約は一貫性を支えますが、トランザクションを使うだけで、アプリケーションの誤った振込額や業務ロジックまで自動で直るわけではありません。正しい処理と制約を設計する必要があります。
理解を確かめる確認問題
「途中で失敗したため、振込の両方の変更を取り消す」は、主にACIDのどの性質を説明していますか?
解答・解説を見る
原子性(Atomicity)です。確定後の結果を障害後も保持する性質は、永続性(Durability)です。


コメント