R2PM1問2設問2(2)理由
HOGEさん
(No.1)
R2PM1問2設問2(2)のトランザクションレベルをREAD COMITTEDとREPEATABLE READのどちらを設定すべきかの理由について、
解答例では「同時実行した他者が同じ座席を仮予約できないようにするため」となっています。
しかし、チケットの販売処理が図5のようになっている場合に、同時実行した他者が同じ座席を仮予約するというのは起こり得る状況でしょうか?
図5を見ると販売管理システムで④の処理まで行われてから、空席管理システムの処理に移行しています。販売管理システムの③でUPDATE文の対象となる"チケット"テーブルの行と、空席管理システムで仮予約フラグの更新対象となる"座席状況"テーブルの行は1:1に対応しているはずです。なので、同時実行した他者が同じチケット(座席)を購入しようとしても、1つの処理以外は販売管理システムの③で解放待ちとなり、空席管理システムでは同じ時間には常に1つの処理しか実行されていないかと考えました。どうでしょうか?
解答例では「同時実行した他者が同じ座席を仮予約できないようにするため」となっています。
しかし、チケットの販売処理が図5のようになっている場合に、同時実行した他者が同じ座席を仮予約するというのは起こり得る状況でしょうか?
図5を見ると販売管理システムで④の処理まで行われてから、空席管理システムの処理に移行しています。販売管理システムの③でUPDATE文の対象となる"チケット"テーブルの行と、空席管理システムで仮予約フラグの更新対象となる"座席状況"テーブルの行は1:1に対応しているはずです。なので、同時実行した他者が同じチケット(座席)を購入しようとしても、1つの処理以外は販売管理システムの③で解放待ちとなり、空席管理システムでは同じ時間には常に1つの処理しか実行されていないかと考えました。どうでしょうか?
2021.10.04 22:33
ななさん
(No.2)
>空席管理システムでは同じ時間には常に1つの処理しか実行されていないかと考えました
おっしゃる通りだと思います。
> 同時実行した他者が同じ座席を仮予約できないようにするため
これは、「同時実行した他者が(自分が仮予約しようとした席と)同じ座席を(自分より先に)仮予約できないようにするため」という意味ではないでしょうか。
2021.10.04 23:14
HOGEさん
(No.3)
ご回答いただきありがとうございます。
すみません、質問がわかりにくかったかもしれません。
質問の意図としては、空席管理システムにおいて、同時実行されている状況があり得るのでしょうか?
という旨の質問でした。
販売管理システム側の③のUPDATE文でロックされている限り、空席管理システム側でトランザクションが並列に実行されている状況はないのでは?と考えた次第です。
すみません、質問がわかりにくかったかもしれません。
質問の意図としては、空席管理システムにおいて、同時実行されている状況があり得るのでしょうか?
という旨の質問でした。
販売管理システム側の③のUPDATE文でロックされている限り、空席管理システム側でトランザクションが並列に実行されている状況はないのでは?と考えた次第です。
2021.10.05 07:53
DB娘さん
(No.4)
私も同じ疑問を持ちました。
推測ですが、「販売管理を委託」と記載されているので、
複数の販売管理システムから、1つの空席管理システムへ依頼するような状況を想像しました。
(現実世界でも、複数の販売代理店が同じチケットを販売する状況はあると思いますので)
ですので、複数の販売管理システムから、同じチケットに対して購入処理をしようとした場合に、
問題文中の状況が発生するのかなと思いました。
推測ですが、「販売管理を委託」と記載されているので、
複数の販売管理システムから、1つの空席管理システムへ依頼するような状況を想像しました。
(現実世界でも、複数の販売代理店が同じチケットを販売する状況はあると思いますので)
ですので、複数の販売管理システムから、同じチケットに対して購入処理をしようとした場合に、
問題文中の状況が発生するのかなと思いました。
2021.10.09 19:19
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。