トランザクションACIDとは?トランザクション(ひとまとまりの処理)を信頼できるものにする4つの約束

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

トランザクションACIDとは(全体像)

トランザクションは「ひとまとまりの処理」だけど、それが信頼できるためには守ってほしい性質がある。それをまとめたのがACID(4つの約束の頭文字)だよー。

身近にたとえると、銀行振込。「引き落とし」と「入金」をちゃんと両方そろえる、ルールを破らない、ほかの人の振込とぶつからない、終わったら記録が消えない——こうした安心を支える約束なのー。

押さえるのは、A・C・I・Dがそれぞれ何を表すか。とくにA(原子性)=全部やるか全部やめるかがいちばん問われるよー。


詳しく:4つの約束と「常に完全とは限らない」だけ覚えれば戦える

ここが記事の心臓部。まず4つの約束を見ていこーね。

ACIDの4つの約束

文字名前意味
A原子性(Atomicity)全部やるか、全部やめるか(中途半端を残さない)
C一貫性(Consistency)決めたルール(整合性)を保つ
I独立性(Isolation)同時に動いても互いに邪魔しない
D永続性(Durability)確定したら、その後も消えない

とくによく出るのがA=原子性「全部成功」か「全部なかったこと」のどちらかにして、中途半端を残さないという約束だよー。銀行振込で「引き落としだけ成功」が起きないのは、この原子性のおかげなのー。

ここで一番のひっかけが「ACIDはどんなデータベースでも常に完全に守られる」という思い込み。たくさんのコンピュータに分けた分散データベースでは、ACIDをきっちり守るのが難しく、わざとゆるめることもある。同じだと決めつけないのが大事だよー。

もう1つのひっかけが「NoSQLにはACIDが無い」という古い思い込み。最近はNoSQLでもACIDに対応したものがあるので、「NoSQL=ACIDなし」と決めつけないでねー。

わかりやすく言い換えると

要するに、銀行振込でイメージするとラクだよー。

原子性(A) … 引き落としと入金は、両方やるか・両方やめるか(片方だけはダメ)

一貫性(C) … 残高がマイナスにならない、といった決めたルールを保つ

独立性(I) … 自分の振込が、他の人の振込に邪魔されない

つまり、「ACIDは信頼の4つの約束(A=全部か無か)」「分散だと完全とは限らない」、この2点が試験の急所なのー。


試験のツボ

🔴 一番出る:ACIDの4文字の意味

①A=原子性(全部やるか全部やめるか)、C=一貫性(ルールを保つ)

②I=独立性(同時でも邪魔しない)、D=永続性(確定後は消えない)

🔴 次に出る:原子性(A)

①全部成功か全部なかったことにして、中途半端を残さない

②COMMITで確定・ROLLBACKで取り消しによって実現する

🟡 押さえると安定:常に完全とは限らない

①分散データベースではACIDをきっちり守るのが難しくゆるめることもある

②NoSQLでもACIDに対応したものがある(NoSQL=ACIDなしではない)


よくある間違い

「ACIDはどんなデータベースでも常に完全に守られる」→ ✗  分散データベースではきっちり守るのが難しく、わざとゆるめることもある。

「NoSQLにはACIDがいっさい無い」→ ✗  最近はNoSQLでもACIDに対応したものがある。古い思い込み。

「原子性は処理の一部だけ成功させることである」→ ✗  原子性は全部やるか全部やめるか。一部だけ成功は残さない。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(ACIDの4文字)

📝 オリジナル問題 1 ACIDの4文字の意味

ACIDに関する次の記述のうち、正しいものはどれか。

  1. ACIDは画面の明るさを4段階で細かく調整するための機能のことだとされているものである
  2. ACIDはデータを必ず4つに分割してから保存する決まりのことだとされているものである
  3. ACIDはプログラムの実行をいつも必ず4倍速くする設定のことだとされているものである
  4. ACIDは原子性・一貫性・独立性・永続性という、トランザクションの信頼を支える約束だ
データスラ
データスラ 解答・解説

解答は 4 だよー。

ACIDは、原子性・一貫性・独立性・永続性という、トランザクションを信頼できるものにする4つの約束の頭文字なのー。銀行振込の安心を支えるしくみだよー。

選択肢1の「明るさ調整」、選択肢2の「4つに分割」、選択肢3の「4倍速くする」はどれも誤りなのー。

選択肢判定理由
1明るさ調整ではない
24分割の決まりではない
3速くする設定ではない
4信頼を支える4つの約束

オリジナル問題2(原子性)

📝 オリジナル問題 2 原子性(A)

ACIDの原子性に関する次の記述のうち、正しいものはどれか。

  1. 原子性は処理を全部やるか全部やめるかにして、中途半端な状態を残さない約束である
  2. 原子性は処理の一部だけを必ず成功させて残すことを指すものだとされているものである
  3. 原子性はデータを原子の大きさまで小さくする操作のことだとされているものである
  4. 原子性は画面に原子の絵を表示するための機能のことだとされているものである
データスラ
データスラ 解答・解説

解答は 1 だよー。

原子性は、処理を全部やるか全部やめるかにして、中途半端な状態を残さない約束なのー。銀行振込で「引き落としだけ成功」が起きないのは、これのおかげだよー。

選択肢2の「一部だけ成功」、選択肢3の「原子の大きさまで小さく」、選択肢4の「原子の絵を表示」はどれも誤りなのー。

選択肢判定理由
1全部か無か・中途半端を残さない
2一部だけ成功は残さない
3データを小さくする操作ではない
4絵を表示する機能ではない

オリジナル問題3(常に完全とは限らない)

📝 オリジナル問題 3 ACIDは常に完全とは限らない

ACIDの実現に関する次の記述のうち、正しいものはどれか。

  1. ACIDはどんなデータベースでも常に完全に守られ、ゆるめることはないものだとされている
  2. NoSQLにはACIDがいっさい無く、今後も対応することはないものだとされているものである
  3. 分散データベースではACIDをきっちり守るのが難しく、わざとゆるめることもあるのだ
  4. ACIDはデータベースとは無関係の、画面の設定項目のことだとされているものである
データスラ
データスラ 解答・解説

解答は 3 だよー。

たくさんのコンピュータに分けた分散データベースでは、ACIDをきっちり守るのが難しく、わざとゆるめることもあるのー。常に完全とは限らないんだよー。

選択肢1の「常に完全」、選択肢2の「NoSQLは一切なし」、選択肢4の「画面の設定」はどれも誤りなのー。

選択肢判定理由
1分散ではゆるめることもある
2NoSQLでもACID対応がある
3分散では守るのが難しくゆるめることも
4画面の設定ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る