📒 ミライのITパス日誌

第33話「振込のお金はどこへ?」

テクノロジ系 / データベース ── テーマ:トランザクション・ACID特性・排他制御・障害回復

▶ マンガで読む(無料・登録なし)

この話で覚える用語(7語)

トランザクションとらんざくしょん
データベースに対する、切り離せない一連の処理のまとまり。「Aの口座から引く」と「Bの口座に足す」のように、全部成功するか全部取り消すかのどちらかにする。
コミットこみっと
トランザクションの処理がすべて成功したとき、その結果を確定させること。確定した結果はデータベースに反映される。
ロールバックろーるばっく
トランザクションが途中で失敗したとき、更新前の記録(ログ)を使って、処理を始める前の状態に戻すこと。
ACID特性あしっどとくせい
トランザクションが守るべき4つの性質。原子性(A)・一貫性(C)・独立性(I)・耐久性(D)の頭文字。
排他制御はいたせいぎょ
複数の処理が同じデータを同時に更新して矛盾が出ないよう、使っている間は他の処理に使わせない(ロックをかける)しくみ。
デッドロックでっどろっく
複数の処理が、お互いに相手がロックしているデータの解放を待ち続け、どれも先に進めなくなった状態。
ロールフォワードろーるふぉわーど
ディスク障害などのとき、バックアップを戻したあと、更新後の記録(ログ)を使って障害直前までの更新をやり直し、状態を回復すること。

試験に出るポイント

覚え方:全部か、ゼロか
ここ試験に出る!

確認クイズ(ITパスポート試験の形式)

問1 トランザクションのACID特性のうち、「処理がすべて実行されるか、まったく実行されないかのどちらかである」ことを表すものはどれか。
  1. 原子性
  2. 一貫性
  3. 独立性
  4. 耐久性
答えと解説を見る

正解:ア 原子性
「全部か、ゼロか」は原子性(Atomicity)。一貫性は矛盾がないこと、独立性は同時に動いても影響しないこと、耐久性は確定した結果が消えないことです。

問2 デッドロックの説明として、適切なものはどれか。
  1. 複数の処理が、互いに相手のロックの解除を待ち続けて先に進めなくなる状態
  2. 同じデータを同時に更新しないよう、使用中のデータを他の処理から使えなくすること
  3. トランザクションの処理結果を確定させること
  4. 障害時に、バックアップとログを使って更新をやり直すこと
答えと解説を見る

正解:ア 複数の処理が、互いに相手のロックの解除を待ち続けて先に進めなくなる状態
お互いに待ち合って止まるのがデッドロック。使用中のデータを使わせないのは排他制御、確定はコミット、ログで更新をやり直すのはロールフォワードです。

問3 データベースを格納したディスクが故障した。バックアップを復元したあと、更新後の記録(ログ)を使って障害の直前の状態まで戻す処理はどれか。
  1. ロールフォワード
  2. ロールバック
  3. コミット
  4. 排他制御
答えと解説を見る

正解:ア ロールフォワード
バックアップ+更新後ログで「早送り」するのがロールフォワード。ロールバックは途中で失敗したときに更新前ログで「巻き戻す」処理です。

▶ アプリでクイズに挑戦(間違えた問題は復習に残ります)

マンガのセリフ(文字版)

家計簿アプリに送金機能を作ることに

ミライ「「Aさんから1万円引く」「Bさんに1万円足す」…この間でサーバが止まったら?」

ミライ「Aさんのお金は減ったのに、Bさんに届かない!?1万円が消える!!」

ツカサ先輩「大丈夫。その2つはトランザクションとしてひとまとめに扱うんだ」

ミライ「ひとまとめ…?」

ツカサ先輩「全部うまくいったらコミットで確定する」

ツカサ先輩「途中で失敗したらロールバックで、始める前の状態に戻す」

1トランザクション開始2Aさんの残高 −1万円3Bさんの残高 +1万円4全部成功 → コミット途中で失敗したら → ロールバック(Aさんの1万円も元に戻る)
振込のトランザクション 「引くだけ」で終わることは絶対にない
📝 メモ:覚え方:全部か、ゼロか
  • トランザクション=全部やるか、まったくやらないか
  • コミット=「ファイナルアンサー!」で確定
  • ロールバック=ゲームオーバーでセーブ地点からやり直し
  • 振込は「半分だけ成功」が一番こわい。だからひとまとめ

ツカサ先輩「トランザクションが守るべき4つの性質をACID特性という」

ミライ「アシッド(酸)…レモン味ですか?」

ツカサ先輩「味はない!4つの性質の頭文字 A・C・I・D だ」

性質意味振込で言うとA 原子性全部やるか全部やらないか引くだけで終わらないC 一貫性矛盾のない状態を保つ2人の合計金額が変わらないI 独立性同時に動いても互いに影響しない2件同時でも正しい結果D 耐久性確定した結果は消えない完了後に停電しても残る
ACID特性 頭文字で ACID。原子性=「全部か、ゼロか」

ミライ「夫婦で同じ口座を、同時に更新したら?」

ツカサ先輩「片方が使う間、もう片方を待たせる。排他制御だ。トイレの鍵と同じだな」

ミライ「でも、2人がお互いの鍵を待ち合ったら…?」

ツカサ先輩「どちらも永遠に進めない。これがデッドロックだ」

処理1処理2🔒 口座A🔒 口座B使用中使用中待ちお互いに相手の鍵が空くのを待ってどちらも永遠に進めない
デッドロック ロックをかける順番をそろえると起きにくい

部長「かんたんだ。鍵を全部捨てればデッドロックは起きん!」

ツカサ先輩「同時に書き換えて残高がメチャクチャになります!」

ツカサ先輩「鍵は残して、かける順番をそろえるんです」

もしもディスクが壊れたら――

ツカサ先輩「データベースは、更新の記録をログファイルに残している」

ツカサ先輩「バックアップを戻し、ログで更新をやり直す。これがロールフォワードだ」

ロールバックロールフォワードいつ処理の途中で失敗したときディスクなどが壊れたとき使うもの更新前の記録(ログ)バックアップ+更新後の記録(ログ)向き巻き戻す(取り消す)早送りする(やり直す)
ロールバックとロールフォワード 巻き戻すか、早送りするか

ミライ「SNSの投稿みたいな大量のデータも、全部きっちりした表ですか?」

ツカサ先輩「量も形もバラバラなビッグデータには、表にこだわらないNoSQLも使う」

ミライ「送金は全部やるか、全部やらないか!これで1万円は消えません!」

ツカサ先輩「安心して作れるな」

📌 ここ試験に出る!:ここ試験に出る!
  • 原子性=全部実行か、まったく実行しないか
  • 耐久性=確定した結果は障害が起きても消えない
  • 途中で失敗 → ロールバック(更新前ログで戻す)
  • ディスク故障 → ロールフォワード(バックアップ+更新後ログ)
  • お互いのロック解除を待って進まない → デッドロック

部長「ワシのダイエットもロールバックした…元の体重に戻った…」

ミライ「それはただのリバウンドです!!」

← 第32話 ネットで売る、つながる第34話 その平均、信じていい? →