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

はじめに

みなさんこんにちは。
今日はDBについて書いてみます。トランザクション処理を噛み砕いてみました。

非エンジニアと会話することも多いので、伝え方が毎日学びになります。

前提

トランザクションとは?
トランザクションとは一連の処理単位であり、複数の処理で構成されます。

わかりやすく例に出すと、「AさんからBさんへ1万円送金する」という処理があるとします。
こちらを分解すると、
1. Aさんの口座から1万円を引く
2. Bさんの口座に1万円を足す

となります。

上記の1連の流れがトランザクションとなります。

ACID属性

さて、上記の流れですが、2つの処理が完了して1つのトランザクションが完了となります。
「全部成功、全部失敗」にすることが大切になりますね。
いずれかが失敗すると、1万円が増えていたり減ってしまったりします。

全てを完了させるために必要な性質が「ACID」です。
ACID」は下記の通り構成されます。

略称英語日本語での意味例えでイメージ
AAtomicity(原子性)すべて成功するか、
全部なかったことにする
「送金が途中で止まらず、全額動くか全く動かない」
CConsistency(一貫性)データが正しいルールに
従っている
「送金後も全体の残高が合う(お金が消えない・増えない)」
IIsolation(独立性)同時に処理しても
お互いに影響しない
「A→Bへの送金中に、他の人の送金が割り込まない」
DDurability(永続性)成功したら、
記録は確実に保存される
「停電しても、処理結果が消えない」

銀行の送金に例えると。。。

処理ACID的に説明すると…
AさんがBさんに1万円送るトランザクション開始
① Aさんの残高 −1万円途中で止まったら困るので「Atomicity」でまとめる
② Bさんの残高 +1万円処理後に残高が正しい(Consistency)
同時に別の送金が行われても混ざらない(Isolation)
送金成功 → 記録を確実に保存(Durability)停電しても大丈夫

まとめ

ACID属性は「データベースの処理を、安全・正確・確実に行うための4つの約束」です。

特性簡単に言うと
A(原子性)中途半端な処理を残さない
C(一貫性)不正なデータを作らない
I(独立性)他の処理と混ざらない
D(永続性)結果を確実に残す