平成21年度 春期 ITパスポート試験 問82 解説 データ更新の競合
データDを更新する二つの処理A,Bが,①→③→②→④のタイミングで実行された場合,Dの値は幾らになるか。ここで,Dの初期値は2とする。
- ア 6
- イ 7 ✓ 正答
- ウ 11
- エ 21
解説
各処理がどの時点でデータを読み込み、どの時点で書き込むかを時系列に沿って追うことで正解が導けます。初期値を2として、以下の手順で計算します。
- ①(処理Aの読込み):Dの値を読み込む。この時点では2。
- ③(処理Bの読込み):Dの値を読み込む。書き込みがまだ行われていないため、ここでも2を読み込む。
- ②(処理Aの書込み):処理Aの計算を実行する。ここでは となり、Dに6を書き込む。
- ④(処理Bの書込み):処理Bの計算を実行する。処理Bが読み込んだ値(2)に対し、加算を行う。つまり となり、Dに7を書き込む。
最終的にDの値は7となります。
処理の順序とデータの不整合
この問題は、データベースにおける「更新時における競合」という概念を扱っています。コンピュータの処理は、データに対する「読み込み(Read)」と「書き込み(Write)」の工程に分かれています。
もし、ある処理がデータを読み込んでから計算をして書き込むまでの間に、別の処理がそのデータを上書きしてしまった場合、最初に行った処理が書き込んだ結果は、別の処理によって無効化されてしまいます。今回のケースでは、処理Bが古い値を保持したまま計算を行ったため、処理Aが行った計算結果(6)が後から上書きされる処理Bの結果によってかき消されてしまったわけです。
トレースによる状況の把握
このような問題では、頭の中でシミュレーションするだけでなく、時系列順のリストを作成するのが最も確実です。
・初期状態: ・時点①(処理A): を読み込み(値は2) ・時点③(処理B): を読み込み(値は2) ・時点②(処理A):読み込んだ値2を使って計算し、 を書き込む() ・時点④(処理B):読み込んだ値2を使って計算し、 を書き込む()
このように整理すると、処理Aによる結果が処理Bによって上書きされている構造が明確になります。
データベース管理システムにおける重要性
この知識は、実務における「排他制御」という仕組みを理解するための基礎となります。複数のユーザーが同時に同じデータを更新する場合、上記のような計算結果の矛盾が起きると、在庫数が合わなくなったり、口座残高が正しく反映されなかったりといった重大なトラブルに繋がります。
実際のシステム開発では、特定の処理がデータにアクセスしている間、他の処理を待機させたり、読み込み時の状態をロックしたりすることで、この種の問題を回避しています。ITパスポート試験では、このような競合状態が起きるかどうか、またその結果値はどうなるかを問う問題が頻出します。単なる計算問題として捉えるだけでなく、システムが並列に動く際に生じるデータの不整合という側面を理解しておくと、より本質的な理解につながるでしょう。