どうも!ひよこSE(@PiyoOct)です。
ACID特性って?
ACID特性をわかりやすく箇条書きにするとこんな感じ。
- 【Atomicity(原子性)】トランザクションは、「すべて実行される」、「実行されない」のどちらかであること
- 【Consistency(一貫性)】データベースの内容に矛盾がない状態であること
- 【Isolation(独立性、隔離性)】トランザクションの実行が同時、順番のどちらであっても結果は変わらないこと
- 【Duability(耐久性)】データベースが故障した場合でも、なんらかの復旧手段があること
ひとことで言ってしまえば、データを入れ替えするときのルール的なものです。
基本情報技術者試験的には、赤枠で囲った箇所を丸暗記してしまえば正答できるのだけど(H26春とH29秋)。
ACID特性で問題になりそうなことを、業務でデータベースの設計をするときに問題になりそうなことも備忘録的に書いておきます。
トランザクションのACID特性とは?
H26春とH29秋の2回、基本情報技術者試験で出ているので、トランザクション(データを入れ替えすること)のお約束事的な、「ACID特性」は頻出単語。
- 【Atomicity(原子性)】トランザクションは、「すべて実行される」、「実行されない」のどちらかであること
- 【Consistency(一貫性)】データベースの内容に矛盾がない状態であること
- 【Isolation(独立性、隔離性)】トランザクションの実行が同時、順番のどちらであっても結果は変わらないこと
- 【Duability(耐久性)】データベースが故障した場合でも、なんらかの復旧手段があること
問題解きながら、呪文のように覚えるべし(-_-;)。
・・・ではあるのだけど、Aの原子性から順番に、もうちょい踏み込んで解説していきます。
Atomicity(原子性)
トランザクションは、「すべて実行される」、「実行されない」のどちらかであることを言い換えれば、「トランザクション(データの入れ替え)を開始したら、『コミット』(確定)と『ロールバック』(巻き戻す)のどちらかを宣言しろ」ということ。
「データの入れ替えをしているけど、いつ終わるかわかんないから、ずっと待っててね」と言われても困っちゃいます。いつまで待っとればいいんやって言いたくなります。
※Quitaの記事にある、トランザクションを開始したまま知らずに放置していたら、SQLの待ちが増えすぎてシステム落ちた的な恐ろしいことに。ひよこSEも気を付けよう・・・。
「ずっと待ってろ」的なのは許さない、終了が宣言される前提なのがAtomicity(原子性)です。
Consistency(一貫性)
Consistency(一貫性)は、データベースの状態に矛盾がないこと。
例えば、「学生番号」というものは、1つの大学なり高校なりで、1つだけの番号。
学生番号がダブっていて、「2022AA001番が2人いる」なんてことがあったらダメですよね。
矛盾した情報を入れようとしたときに、データベース側で止めてくれる機能がConsistency(一貫性)です。
お・・・!もしや気づいた人もいるかも。気づいた人はすごいです。
Consistency(一貫性)の例が、主キー制約です。
Isolation(独立性、隔離性)
Isolation(独立性、隔離性)は、トランザクションの実行が同時、順番のどちらであっても結果は変わらないことです。
「結果が変わらないって、ホントかよ?」と思った人はするどいです。
実は、データベースの世界では「独立性をどこまで担保するのか?」というのを設定することができます。
※業務レベルの話だから、無理して理解しなくていいです。「こんなのあるんだな」くらいで。
例えば、トランザクションAがデータを取ってくる処理だとして、裏側で同時にデータを更新したり追加するトランザクションBが実行されていたとします。
- 【READ UNCOMMITTED】(トランザクションBがコミットされていない未確定の状態だとしても、AはBで更新・追加されたデータを読み込む。”I”の独立性は、完全に無視)
- 【READ COMMITTED】(トランザクションBがコミット、確定されたデータであれば、AはBで更新されたデータを読み込む。「追加」ではなく「更新」)
- 【REPEATABLE READ】(トランザクションBがコミット、確定されたデータであれば、AはBで追加されたデータを読み込む。「更新」ではなく「追加」)
- 【SERIALIZABLE】Bは、自分のトランザクションが終わるまでロックをかけて、Aを待たせる。”I”の独立性が最も強いが、速度もかなり落ちるので普通は使われない。
※参考記事:トランザクション分離レベルについてのまとめ
「READ UNCOMMITTED」とか「READ COMMITTED」が、基本情報技術者試験に出ることはないので。
すぐにすべてを覚える必要はないのだけど、「トランザクションの独立性を設定できる」というのは、エンジニアになる上で知っておいて損なし!
Duability(耐久性)
Duability(耐久性)は、トランザクション(データの入れ替え)の結果、データがおかしくなったり、データベースが故障した場合でも、なんらかの復旧手段があること。
例えば、フルバックアップを行う機能(DBダンプを出力する機能)がRDBMS(データベースの製品)には、ほぼ必ずと言っていいほどあります。
万が一壊れても、バックアップから復旧すればよしというわけ。
まとめ
ACID特性ときたら、下の箇条書きを丸暗記!これでとりあえず1点Getできます。
- 【Atomicity(原子性)】トランザクションは、「すべて実行される」、「実行されない」のどちらかであること
- 【Consistency(一貫性)】データベースの内容に矛盾がない状態であること
- 【Isolation(独立性、隔離性)】トランザクションの実行が同時、順番のどちらであっても結果は変わらないこと
- 【Duability(耐久性)】データベースが故障した場合でも、なんらかの復旧手段があること
実際のシステム開発で、ここら辺を議論するようになったら、もう新米プログラマーは脱出していると言えるかと。
そんな時に、「なんかひよこのクセに難しいこと書いてあるサイトあったな~」と思い出してもらえたらうれしい限りです 笑
コメント