スポンサーリンク

問題の解答・解説ページ

このページは解説の閲覧モードです。
実力試しをしたい方は、下のボタンからクイズに挑戦してください!

この問題をクイズ形式で解く
問題 No.3407
ECサイトのオンラインショッピングにおいて、在庫が1個残っている商品を2人の利用者が同時に購入手続きを行った。データベースの整合性を保つため、一方が処理を完了するまでもう一方の処理を待たせる制御方式として、最も適切なものはどれか。

【正解の解説】

複数のトランザクションが同時に同じデータを更新しないように排他制御を行う

人気ラーメン店の食券売機に例えると、残り1杯のラーメンを2人が同時に買おうとした際、店員が間に割り込んで1人ずつ順番に買わせる「順番待ちの列を作るガードマン」の役割を果たします。これにより、同じ商品を2人が同時に買ってしまい在庫がマイナスになるといったデータの矛盾や不整合を完全に防ぐことができます。

スポンサーリンク

【その他の選択肢の解説】

複数のトランザクションで処理順序を保証するためにコミットとロールバックの制御を行う

コミットやロールバックは一連の処理が成功したか失敗したかを確定・取消するものであり、同時実行時の順番待ちをコントロールする排他制御とは役割が異なります。初学者はトランザクション用語の総まとめとして混同しやすいため注意が必要です。

複数のトランザクションが競合した際に直前の安定した状態へ復旧させるバックアップを行う

バックアップは過去の安全な状態に戻すための保険のようなものであり、今回の「まさに今起きている同時購入の衝突を防ぐ」リアルタイムな制御方式とは全く異なります。試験では過去への復旧とリアルタイムな衝突防止が意図的に混同されて出題されます。

複数のトランザクションを同時に実行させて結果の不整合を自動的に修正する補正を行う

自動的に修正する補正機能はデータベースの標準的な同時実行制御ではなく、エラーが起きた後の個別アプリケーション層での対応を指します。あらかじめ衝突を防ぐ排他制御とはアプローチのタイミングが根本的に異なります。