複数の利用者が同一データベースに同時にアクセスする処理のうち, データの整合性を保つための対策が不要な処理はどれか。
平成23年度 秋期 ITパスポート試験 問63
この問題の解説と、これまでの解答の記録です。
問 63
不正解ア
オークションの入札処理は、同一の出品物に対する現在の最高入札額や入札履歴を書き換える更新処理である。複数の利用者がほぼ同時に入札すると、両者が更新前の同じ最高額を読み取ってそれぞれ書き戻し、一方の入札が記録から消える更新の喪失が起こりうる。落札者を一意に確定させるためにも排他制御が必要であり、対策が不要な処理ではない。
不正解イ
オンラインショッピングの申込み処理は、注文データの登録に加えて商品の在庫数を減らす更新を伴う。残り一個の商品に複数の利用者が同時に申し込むと、いずれも在庫ありと判断して同時に減算し、在庫が実際より多く見えたり負の値になったりして整合性が崩れる。在庫の確認から更新までを一つのトランザクションとして排他制御する対策が欠かせないため、誤りである。
- ウ
正解 正解はウ。複数の利用者が同一データベースに同時にアクセスするとき、整合性 (一貫性) が問題になるのは、同じデータに対して更新 (書込み) が重なる場合である。たとえば二人が同時に同じデータを読み取り、それぞれが自分の読んだ値をもとに書き戻すと、先に書いた側の更新が後から書いた側に上書きされて消えてしまう。これを更新の喪失 (ロストアップデート) といい、これを防ぐために排他制御 (ロック) やトランザクションによる同時実行制御が必要になる。ウの図書情報の検索処理は、書名や著者名などの条件で蓄積済みのデータを参照するだけの処理であり、データベースの内容を書き換えない。読取りだけであれば、何人が同時に実行しても互いの結果を壊すことはなく、同じデータを同時に読むこと自体は矛盾を生まないので、整合性を保つための対策は不要である。実際、データベース管理システムのロックでも、読取り同士は共有ロック同士として同時に取得でき互いに待たされないが、更新を伴う専有ロックは他の処理を待たせるという扱いになっている。以上より、対策が不要な処理は参照専用のウである。
不正解エ
列車座席の予約処理は、指定した座席を予約済みに書き換える更新処理である。複数の利用者が同じ座席を同時に予約しようとしたとき対策がないと、双方が空席と判断して予約が成立し、同一座席の二重予約という典型的な不整合が発生する。空席の確認と予約の確定を分割されない一連の処理とし、排他制御で同時更新を防ぐ必要があるため、対策が不要な処理には該当しない。
- 同時実行制御が必要になる条件 — データベースへの同時アクセスで整合性が崩れるのは、同一データに更新 (書込み) が競合する場合である。読取りだけの処理は互いにデータを壊さないので対策は不要で、更新を伴う処理には排他制御 (ロック) が要る。この更新の有無が選択肢を切り分ける判定基準になる。
- 更新の喪失と排他制御 — 二つの処理が同じ値を読んでそれぞれ書き戻すと先の更新が消える現象を更新の喪失 (ロストアップデート) という。これを防ぐため、一連の処理をトランザクションとしてまとめ、更新対象に専有ロックを掛けて他の処理を待たせる。読取り用の共有ロックは同時取得できるが、専有ロックは他と併用できない。