DBのACID特性
DB周りの理解が浅いなと最近感じ、ACID特性も雰囲気でしか理解してなかったので、自分用にまとめました。
内容を知りたい方は、wikipediaで十分だと思います。
ACID特性とは
一言でいうと、DBに求められるトランザクションの要件のことです。
- A: Atomicity(原子性)
- C: Consistency(一貫性)
- I: Isolation(独立性)
- D: Durability(耐久性)
それぞれ、説明します。
Atomicity(原子性)
トランザクションに含まれるタスクが全て実行されるか、あるいは全く実行されないことを保証する性質です。
例えば、ECサイトでユーザが購入完了する処理と、店舗の在庫が減る処理が片方だけ発生してしまったら、Atomicityを満たしてないです。
Consistency(一貫性)
トランザクション開始時と終了時に制約を満たす性質です。
例えば、決済だけ行われて与信枠が減らなかったり、銀行の残高がマイナスにはなるとConsistencyを満たしてないです。
Isolation(独立性)
トランザクション中に行われる操作の過程が他の操作から隠蔽されるという性質です。
独立性とパフォーマンスはトレードオフの関係にあります。
あまりにも独立性を高めようとすると、一つ処理するトランザクションがあるだけで、他のトランザクションは参照できなくなり、パフォーマンスが低下します。
そのため例えば、MySQLではトランザクションの分離レベルが設定できます。
MySQL :: MySQL 5.6 リファレンスマニュアル :: MySQL 用語集
Durability(永続性)
トランザクションが完了したら、障害が発生したとしても結果は失われないという性質です。
ディスクに保存されておらずメモリ上で残ってるだけの状態で、ハードウェアに障害が発生した場合に、データが飛んでしまうと永続性がないです。