データベースの実装に関する次の記述を読んで,設問1〜3に答えよ。
劇場運営会社のY社は,オンラインチケット販売システム(以下,チケット販売システムという)を構築してインターネットでのチケットの申込みを受け付けている。Y社ではチケット販売システムを刷新し,新たにプレイガイドなどでのチケット販売委託を進めることになった。
〔RDBMSの主な仕様〕
チケット販売システムに用いているRDBMSの主な仕様は,次のとおりである。
1.ISOLATIONレベル
選択できるトランザクションのISOLATIONレベルとその排他制御の内容は,表1のとおりである。
ロックは行単位で掛ける。共有ロックを掛けている間は,他のトランザクションからの対象行の参照は可能であり,変更は共有ロックの解放待ちとなる。専有ロックを掛けている間は,他のトランザクションからの対象行の参照,変更は専有ロックの解放待ちとなる。
ISOLATIONレベル | 排他制御の内容 |
READ COMMITTED | データ参照時に共有ロックを掛け,参照終了時に解放する。 データ変更時に専有ロックを掛け,トランザクション終了時に解放する。 |
REPEATABLE READ | データ参照時に共有ロックを掛け,トランザクション終了時に解放する。 データ変更時に専有ロックを掛け,トランザクション終了時に解放する。 |
2.レプリケーション機能
(1)1か所のデータを複数か所に複製する機能,複数か所のデータを1か所に集約する機能,及び両者を組み合わせて双方向に反映する機能がある。これらの機能を使用すると,一方のテーブルへの挿入・更新・削除を他方に自動的に反映させることができる。
(2)トランザクションログを用いてトランザクションと非同期に一定間隔でデータを反映するバッチ型と,レプリケーション元のトランザクションと同期してデータを反映するイベント型がある。
①バッチ型では,テーブルごとに,レプリケーションの有効化,無効化をコマンドによって指示することができる。無効化したレプリケーションを有効化するときには,蓄積されたトランザクションログを用いてデータを反映する。
②イベント型では,レプリケーション先への反映が失敗すると,レプリケーション元の変更はロールバックされる。
(3)列の選択,行の選択及びその組合せによって,レプリケーション先のテーブルに必要とされるデータだけを反映することができる。
〔チケット販売システムの概要〕
チケット販売システムは,空席管理システムと販売管理システムで構成される。オンラインチケット販売時には,空席管理システムで空席を確認した後に座席を確保し,販売管理システムでチケット情報を保持する。
〔チケット販売システムのテーブル〕
空席管理システムと販売管理システムのそれぞれの主なテーブルのテーブル構造は,図1,2のとおりである。索引は,主キー及び外部キーに定義している。
図1 空席管理システムの主なテーブルのテーブル構造(一部省略)
図2 販売管理システムの主なテーブルのテーブル構造(一部省略)
〔チケット販売業務の概要〕
1.テーブル及び列の設定
(1)会場と座席
①会場には,一意な会場番号を付与して,都道府県,住所,座席図などを設定する。
②座席には,会場ごとに一意な座席番号を付与して,席種('S','A','B'など)を設定する。
(2)公演と席種料金
①公演には,一意な公演番号を付与する。公演開催明細には,公演日時(公演日,開演時刻)ごとに,開場時刻,公演会場番号,販売開始日などを設定する。
②席種料金には,公演の席種ごとに料金を設定する。
(3)席種在庫と座席状況
①席種在庫には,席種ごとの空席数をもつ。座席の購入が確定したら空席数を減らし,購入された座席がキャンセルされたら空席数を戻す。
②座席状況には,公演開催明細ごとの全ての座席の状況をもつ。販売開始時には,空席フラグはオン,仮予約フラグはオフとする。座席の購入処理中は仮予約フラグをオンにする。座席の購入が確定したら,空席フラグをオフにして,仮予約フラグをオフにする。
(4)チケット
①チケットには,公演開催明細ごとに,全ての座席番号と席種を設定する。
②未販売のチケットは,購入フラグをオフに,購入番号をNULLに設定する。
③チケットの購入を申し込まれたら,購入フラグをオンにする。購入が確定したら,購入番号を設定する。
2.チケットの購入
(1)チケットを購入するためには,会員登録をする必要がある。
(2)会員は,チケットの検索を行って,チケット情報一覧を表示する。チケット情報は,公演名・公演日・開演時刻の昇順,料金の降順に出力される。
(3)会員は,チケット情報一覧から,空席のある公演の席種を選択する。その後,枚数を指定し,空席の座席番号を希望枚数分指定する。
(4)会員は,決済を行い,決済が成立すれば購入が確定する。
〔チケット情報一覧を出力するSQL文の設計〕
空席管理システムから,公演日が2020年4月かつ都道府県が東京のチケット情報一覧の出力の例を図3.出力するSQL文の構文を図4に示す。
図3 チケット情報一覧の出力の例
図4 チケット情報一覧を出力するSQL文の構文(未完成)
〔オンラインチケット販売処理の設計〕
チケット販売委託のため,空席管理システムは,プレイガイドなどの外部委託先にも公開する。このために,空席管理システムの空席確認,仮予約の処理の見直しを行った。見直しに当たって,同時実行されたトランザクションのやり直しが極力発生しないようにする方針とした。
ある会員が複数のチケットを購入することを想定して,チケットの販売処理について検討した。その概要を図5に示す。
図5では,会員の意思で購入を途中でキャンセルした場合,空席でない座席があり購入が失敗した場合,又はその他のエラーが発生した場合の,途中までの処理を取り消すための例外処理を省略している。
図5 チケットの販売処理の概要(未完成)
図5の内容のレビューを行った。レビューでの指摘内容と対策を表2に示す。
指摘内容 | 対策 |
複数の会員が,ほぼ同時に, あ を購入しようとした場合,排他制御によって,会員に不便を強いるおそれがある。例えば,後から購入しようとした会員は,先に購入しようとした会員の購入処理が完了するまで待たされてから, い ことが判明する。 | 販売管理システムでの空席確認が,そのままチケット購入中となるように,②の処理をやめて③の処理の購入フラグをオンにする条件に う が え であることを追加する。さらに,全ての対象座席を②〜⑦でまとめて処理しているのを,ロックの期間を短縮するために,1座席ごとに処理して お するよう変更する。 |
〔レプリケーションの設計〕
チケット販売委託先に,空席管理システムを介して,空席情報を表示するサービスも提供する。そのため,データベースへの大量のアクセスによるロックの解放待ちの多発が見込まれるので,空席情報表示用のレプリケーション先のテーブル(以下,レプリカデータという)を作成することにした。レプリカデータのテーブル構造は,図1の空席管理システムの主なテーブルと同等なものとし,サービスの提供先ごとにレプリカデータを用意する。レプリカデータの運用について図6に示す。さらに,図6の内容のレビューを行った。レビューでの指摘内容と対策を表3に示す。
図6 レプリカデータの運用(未完成)
指摘内容 | 対策 |
レプリカデータにアクセスするタイミングによって,次のように,表示する空席情報が不正になる場合がある。 1.購入された座席が空席として表示される。 2. エ |
イベント型のレプリケーション機能を適用す対象とするテーブルとその列を表4のよる。うに設定する。ただし,レプリケーションの性能への影響を抑えるため,対象は必要最低限のものとする。 |
レプリケーション元テーブル | レプリケーション対象列 |
設問1 〔チケット情報一覧を出力するSQL文の設計〕について図4中の a 〜 g に入れる適切な字句を答えよ。
解答・解説
解答例
a:CASE WHEN
b:IS NULL
c:LEFT [OUTER] JOIN
d:BETWEEN
e:AND
f:ORDER BY
g:DESC
解説
ー
設問2 〔オンラインチケット販売処理の設計〕について,(1),(2)に答えよ。
(1)表2中の あ 〜 お に入れる適切な字句を答えよ。
解答・解説
解答例
あ:同じ座席 又は 同じチケット
い:購入できない
う:購入番号
え:NULL
お:コミット
解説
ー
(2)空席管理システムで実行するトランザクションのISOLATIONレベルは READ COMMITTED(①)とREPEATABLE READ(②)のどちらを設定すべきか,①か②で答えよ。また,その理由を30字以内で述べよ。
解答・解説
解答例
ISOLATION レベル:②
理由:同時実行した他者が同じ座席を仮予約できないようにするため
解説
ー
設問3 〔レプリケーションの設計〕について,(1)〜(3)に答えよ。
(1)図6中の ア 〜 ウ に入れる適切な字句を,本文中の字句を用いて答えよ。
解答・解説
解答例
ア:席種在庫
イ:座席状況
ウ:1 か所のデータを複数か所に複製
解説
ー
(2)表3中の エ に入れる文章を,1.に倣って30字以内で述べよ。
解答・解説
解答例
キャンセルされた座席が空席として表示されない。
解説
ー
(3)イベント型レプリケーション機能の対象とするテーブルとその列を答えて,表4を完成させよ。なお,表4の欄は全て埋まるとは限らない。
解答・解説
解答例
レプリケーション元テーブル | レプリケーション対象列 |
座席情報 | 空席フラグ |
席種在庫 | 空席数 |
解説
ー
IPA公開情報
出題趣旨
オンラインシステムでは,同時実行される要求が,相互に影響して予期せぬ結果を発生させることのないように,処理内容を注意深く設計する必要がある。
本問では,レプリケーション機能を用いたチケット販売システムを題材に,SQL の設計能力,トランザクション制御及び排他制御の理解,適切な同時実行性を満たす設計能力を問う。
採点講評
問 2 では,レプリケーション機能を用いたチケット販売システムを題材に,SQL の設計,トランザクション制御及び排他制御,適切な同時実行性を満たす設計について出題した。全体として正答率はやや低かった。 設問 1 は,正答率がやや高かった。b,d~g は特に高く,述語や ORDER BY 句など個々の構文についてはよく理解されていた。逆に,a と c は低く,条件構文や結合構文には課題があるように見受けられた。 設問 2 は,正答率が平均的であったが,(2)の理由については正答率が低かった。特に,ロックの解放待ち時間の短縮や,デッドロックを回避することを理由に挙げたものが散見された。オンラインシステムでは,同時実行される要求が,相互に影響して予期せぬ結果を発生させることのないように,処理内容を注意深く設計する必要がある。設問中の処理内容と状況記述から,適切な ISOLATION レベルを読み取ってほしい。 設問 3 は,正答率が平均的であったが,(1)ウについては正答率が低かった。設問中のレプリケーション機能の仕様と状況記述から,目的と必要な処理を読み取ってほしい。