平成29年春期問28
今回はこちら

データベース管理に関する用語「2相コミット(Two-Phase Commit, 2PC)」「排他制御(Exclusive Control)」「ロールバック(Rollback)」「ロールフォワード(Roll Forward)」について、それぞれ解説します。
1. 2相コミット(Two-Phase Commit, 2PC)
➡ 分散データベースにおけるトランザクションの一貫性を保証するための手法
概要:
分散データベースでは、複数のデータベース(ノード)が1つのトランザクションを処理することがあります。このとき、すべてのノードが「成功」または「失敗」のどちらかで統一しなければなりません。
2相コミットは、トランザクションの整合性を保つために**2つの段階(Phase)**で処理を行います。
2相の流れ
1. 準備フェーズ(Prepare Phase)
• コーディネーター(制御役)が、各ノードに「コミット可能か?」を問い合わせる。
• 各ノードは準備が整ったら「OK(準備完了)」、準備できなければ「NG(ロールバック)」を返す。
2. コミットフェーズ(Commit Phase)
• **全ノードが「OK」**の場合 → 「コミット」指示を出し、全ノードで処理を確定
• **1つでも「NG」**があれば → 「ロールバック」指示を出し、全ノードで処理を取り消す
メリット・デメリット
✅ メリット:
• データの整合性を確実に保てる
• 分散システムでデータの不整合を防げる
❌ デメリット:
• 通信コストが高く、遅延が発生しやすい
• ノードの障害時に待ち状態が発生する可能性がある
2. 排他制御(Exclusive Control)
➡ 複数のユーザーが同じデータを同時に操作しないように制御する仕組み
排他制御の目的
データベースでは、同じデータに対して複数のトランザクションが同時にアクセスすると、矛盾が発生する可能性があります。これを防ぐために「ロック(Lock)」を利用して1つのトランザクションが完了するまで他のトランザクションを制限します。
排他制御の種類
1. 楽観的排他制御(Optimistic Concurrency Control)
• ロックをせず、データの更新時に矛盾がないかチェックしてから処理を確定
• 競合が少ない場合に有効
2. 悲観的排他制御(Pessimistic Concurrency Control)
• データを更新する前にロックをかけ、他のトランザクションがアクセスできないようにする
• 競合が多い場合に有効
メリット・デメリット
✅ メリット:
• データの不整合を防げる
• 競合が発生した場合でも安全に処理できる
❌ デメリット:
• ロックが長時間続くと、他のトランザクションが待たされる(デッドロックのリスク)
• パフォーマンスが低下する可能性がある
3. ロールバック(Rollback)
➡ トランザクションを取り消し、データを元の状態に戻す処理
ロールバックの概要
トランザクションの途中でエラーが発生した場合、データの不整合を防ぐために変更前の状態に戻すのが「ロールバック」です。
例えば、銀行の振込処理で途中で障害が発生した場合、送金が完了していないのに口座残高が減るような矛盾を防ぐために、ロールバックを実行します。
ロールバックの発生条件
• 障害が発生したとき(システム障害、通信エラーなど)
• トランザクションの整合性が保てなくなったとき
• 手動でキャンセル操作が実行されたとき
メリット・デメリット
✅ メリット:
• データの一貫性を維持できる
• トランザクションのエラー処理が容易になる
❌ デメリット:
• ロールバックが頻発すると、処理の遅延が発生する
4. ロールフォワード(Roll Forward)
➡ 障害発生後、最新の正常な状態までデータを回復する処理
ロールフォワードの概要
「ロールバック」はデータを過去の状態に戻しますが、「ロールフォワード」は障害復旧後に最新の状態までデータを適用し直す方法です。
仕組み:
1. **ジャーナル(ログ)**を利用して、データの変更履歴を記録
2. システム障害が発生した場合、最後に正常だったデータを復旧
3. 変更履歴を適用し、障害発生直前の状態までデータを回復
ロールフォワードが使われる場面
• データベースの障害復旧
• システムのクラッシュ後のリカバリ処理
メリット・デメリット
✅ メリット:
• データの消失を最小限に抑えられる
• 障害後も最新のデータを復元できる
❌ デメリット:
• ジャーナル(ログ)の管理が必要で、ストレージを消費する
まとめ
項目 説明
2相コミット 分散トランザクションの整合性を保つため、2段階で処理を確定する手法
排他制御 データの競合を防ぐため、ロックを使ってアクセスを制限する仕組み
ロールバック トランザクションを取り消し、データを元の状態に戻す
ロールフォワード 障害発生後、ログを使って最新の状態までデータを復旧する
よってアが正しいです。
引用元
https://www.fe-siken.com/s/kakomon/29_haru/q28.html
ChatGPT