【あしっどとくせい】
ACID特性 とは?
💡 データベースの「絶対に守る4つの約束」
📌 このページのポイント
ACID特性って何?なんか難しそう…
銀行振込をイメージして。「AさんからBさんへ1万円送る」とき、Aから引いてBに足す2つの操作が必要だよね。途中でシステムが落ちてもAから引いただけでBに届かない、みたいなことが起きないようにするのがACIDだよ。
原子性って?原子と何の関係があるの?
原子(アトム)はこれ以上分けられない最小の粒子。それと同じで、トランザクションはこれ以上分けられない「一塊」として扱う。全部成功か、全部なかったことになるか、どちらかしかない。半分だけ成功、はない。
独立性ってどういうこと?
同時に複数の人が同じデータを触っても、互いの処理が干渉しないようにする性質。例えば在庫を2人が同時に確認して同時に購入しようとしても、結果がおかしくならないように制御する。
独立性のレベルってあるの?
あるよ。分離レベル(Isolation Level)として4段階が定義されている。Read Uncommitted(最弱、ダーティリード可能)→Read Committed(コミット済みデータのみ読む)→Repeatable Read(同じクエリは同じ結果を返す)→Serializable(最強、完全な直列化)。強くするほど安全だけど性能は低下する。PostgreSQLのデフォルトはRead Committedだよ。
NoSQLはACIDじゃないの?
障害が起きたときACIDはどうやって守られるの?
WAL(Write-Ahead Logging)という仕組みが鍵だよ。データを変更する前にまずログに記録する。コミット前にクラッシュしたらUNDOログで巻き戻し(原子性)、コミット後にクラッシュしたらREDOログで再適用(永続性)。この仕組みのおかげで、電源が落ちてもデータは守られるんだよ。
📖 おまけ:英語の意味
「Atomicity, Consistency, Isolation, Durability」 = 原子性・一貫性・独立性・永続性
💬 まとめると「ACID」になるのは偶然ではなく意図的で、化学の「酸(acid)」のように「ピリッと厳格なデータ管理」を連想させる命名とも言われる