問題 No.6366
データベースの同時実行制御において、データ競合の発生頻度が低いと仮定し、トランザクションの実行中はロックを行わずに処理を進め、更新をコミットする直前に他のトランザクションによるデータの更新競合が起きていないかを検証する方式はどれか。
【正解の解説】
楽観的排他制御
人気が少ないカフェで、みんなが自分の席に財布を置かずに出歩き、レジで会計する時だけ「私の席、誰も座りませんでしたよね?」と確認するようなものです。あらかじめ席を確保(ロック)するのではなく、まず自由に動かせて、最後にトラブルがなかったかチェックするため、競合が少ない環境では非常にスピーディーに処理が進むというメリットがあります。
スポンサーリンク
【その他の選択肢の解説】
二相ロッキングプロトコル
楽観的排他制御が「信じて後で確認する」スタイルなのに対し、こちらは「絶対にトラブルを起こさないために、最初から最後までガチガチに鍵をかける」悲観的なアプローチです。人気のない場所であっても常に鍵をかけ続けるため、データ競合が少ない環境ではかえって待ち時間が長くなり効率が落ちるというデメリットがあります。
タイムスタンプ順序保証方式
銀行の窓口で整理券を配り、必ずその番号順に処理を進めることでデータの矛盾を防ぐ仕組みです。タイムスタンプという厳密な順序管理を行うため、ロックを使わない点は楽観的制御と似ていますが、競合発生時の解決アプローチが異なり、基本的には処理の順序付けそのものに主眼が置かれています。
多版同時実行制御方式
ファイルを上書き保存するのではなく、常に別名で新しい版を保存していくことで、過去のデータを読みたい人と最新を書きたい人が同時に作業できるようにする仕組みです。ロックをせずに並行処理を行う点では楽観的排他制御の仲間ですが、バージョン管理専用の仕組みを持つ点で区別されます。