トランザクション処理 - ACID属性

はじめに
みなさんこんにちは。
今日はDBについて書いてみます。トランザクション処理を噛み砕いてみました。
非エンジニアと会話することも多いので、伝え方が毎日学びになります。
前提
トランザクションとは?
トランザクションとは一連の処理単位であり、複数の処理で構成されます。
わかりやすく例に出すと、「AさんからBさんへ1万円送金する」という処理があるとします。
こちらを分解すると、
1. Aさんの口座から1万円を引く
2. Bさんの口座に1万円を足す
となります。
上記の1連の流れがトランザクションとなります。
ACID属性
さて、上記の流れですが、2つの処理が完了して1つのトランザクションが完了となります。
「全部成功、全部失敗」にすることが大切になりますね。
いずれかが失敗すると、1万円が増えていたり減ってしまったりします。
全てを完了させるために必要な性質が「ACID」です。
「ACID」は下記の通り構成されます。
| 略称 | 英語 | 日本語での意味 | 例えでイメージ |
|---|---|---|---|
| A | Atomicity(原子性) | すべて成功するか、 全部なかったことにする | 「送金が途中で止まらず、全額動くか全く動かない」 |
| C | Consistency(一貫性) | データが正しいルールに 従っている | 「送金後も全体の残高が合う(お金が消えない・増えない)」 |
| I | Isolation(独立性) | 同時に処理しても お互いに影響しない | 「A→Bへの送金中に、他の人の送金が割り込まない」 |
| D | Durability(永続性) | 成功したら、 記録は確実に保存される | 「停電しても、処理結果が消えない」 |
銀行の送金に例えると。。。
| 処理 | ACID的に説明すると… |
|---|---|
| AさんがBさんに1万円送る | トランザクション開始 |
| ① Aさんの残高 −1万円 | 途中で止まったら困るので「Atomicity」でまとめる |
| ② Bさんの残高 +1万円 | 処理後に残高が正しい(Consistency) |
| 同時に別の送金が行われても混ざらない | (Isolation) |
| 送金成功 → 記録を確実に保存 | (Durability)停電しても大丈夫 |
まとめ
ACID属性は「データベースの処理を、安全・正確・確実に行うための4つの約束」です。
| 特性 | 簡単に言うと |
|---|---|
| A(原子性) | 中途半端な処理を残さない |
| C(一貫性) | 不正なデータを作らない |
| I(独立性) | 他の処理と混ざらない |
| D(永続性) | 結果を確実に残す |

