0

非常に問題のある問題に遭遇しました。オンライン注文(現実世界で起こる出来事)のシステムを開発しています。ユーザーが私のサイトでイベントを注文しています (実装は MYSQL DB に書き込む .NET Web サービスによるものです)。関連する 2 つのテーブルは、EVENTS と EVENTonFIELD です (FIELD はユーザーが注文しているリソースです)。(ユーザーは単一または複数のリソースを注文できます)

私の問題は、同じ時間に同じリソースを注文できないようにすることです (おそらく、WS への並列呼び出しによって)。実装は、EVENTS および EVENTonFIELD への挿入 (他のロジックの中でも) を含む MYSQL .NET コネクタ (C#) トランザクションです。

トランザクション A とトランザクション B (両方とも同一: 同じユーザー X、リソース Y、時間 Z) がある状況に陥りました。

トランザクション A が実行されます (リソースが利用可能であることを確認した後)。この間 (tn A はまだコミットされていません)、トランザクション B が実行されます (リソースが使用可能かどうかを検証すると、tn A がまだコミットされていないため、リソースが使用可能であることがわかります)。次に - A がコミットされ、B がコミットされ、次のようになります。

このユーザーにはダブルイベントがあります..

ここでは主キーを使用できません。これは、場合によってはリソースの二重順序付けを許可するためです。そのようなケースを防ぐ方法はありますか?

私が考えた唯一のことは、トランザクションBの間に、どういうわけか並列トランザクション(A)も読んで、衝突があるかどうかをチェックすることです..これは可能ですか?

ありがとう!!

4

0 に答える 0