【あしっどとくせい】
ACID特性 とは?
最終更新:
💡 一まとまりの更新を正しく扱う4つの性質
データベースのトランザクションで重視する4つの性質。原子性・一貫性・独立性(分離性)・永続性を指す。同時処理の見え方や障害への保証範囲は、分離レベル、保存設定、装置の状態などにも関係する。
📌 このページのポイント
- 原子性:一まとまりの更新を全部反映するか、取り消す
- 一貫性:定めたデータの規則を満たす状態を保つ
- 独立性:同時処理の見え方を分離レベルに応じて制御する
- 永続性:確定した更新を永続記憶へ残す
何のための性質なの?
振込なら、送金元から引く操作と送金先へ足す操作を一まとまりにするよ。片方だけ確定させず、全部を確定するか取り消すのが原子性。定めたデータの規則を満たす状態を保つのが一貫性だね。業務上の規則を守る処理も適切に作る必要があるよ。
同時に更新しても影響しない?
独立性は、別の処理の途中経過をどこまで見せるかなどを制御する性質だよ。ロック待ちや再試行が起きる場合もある。Serializableでは、ある順番で1件ずつ実行した場合と同等の結果を目指すけれど、全ての分離レベルがその保証を持つわけではないんだ。
分離レベルは4つあるんだよね?
SQL標準にはRead Uncommitted、Read Committed、Repeatable Read、Serializableがあるよ。同じ名称でも実装の違いに注意しよう。例えば標準のRepeatable Readでは検索に該当する行が増える現象を許すが、PostgreSQLのこのレベルでは許さない。必要な整合性や再試行の扱いを考えて選ぶんだ。
NoSQLでは使えないの?
確定したデータは、どんな障害でも残る?
永続性にも前提があるよ。PostgreSQLのWALは、データファイルの変更を書き出す前に対応するログを永続記憶へ書き出し、必要な更新を復旧時に再適用できる仕組み。保存設定や装置の動作が重要で、保存装置そのものを失う場合にはバックアップなど別の備えが必要なんだ。
まとめ:ざっくりこれだけ覚えればOK!
「ACID特性」って出てきたら「一まとまりの更新を正しく扱う4つの性質」と思えばだいたいOK!
📖 おまけ:英語の意味
「Atomicity, Consistency, Isolation, Durability」 = 原子性・一貫性・独立性・永続性
💬 4つの英語の頭文字を並べた名前だよ。Isolationは分離性とも呼ばれる。命名の逸話より、それぞれが何を守る性質かを結び付けて覚えよう。