【あしっどとくせい】

ACID特性 とは?

最終更新:
💡 一まとまりの更新を正しく扱う4つの性質

データベースのトランザクションで重視する4つの性質。原子性・一貫性・独立性(分離性)・永続性を指す。同時処理の見え方や障害への保証範囲は、分離レベル、保存設定、装置の状態などにも関係する。

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

参考資料

← 用語集にもどる