0

我遇到了一个非常有问题的问题。我正在开发一个在线订购系统(现实世界中发生的事件)。用户正在我的站点中订购一个事件(实现是由一个写入 MYSQL DB 的 .NET Web 服务)。2 个相关表是:EVENTS 和 EVENTonFIELD(FIELD 是用户订购的资源)。(用户可以订购单个或多个资源)

我的问题是 - 防止在同一时间订购相同的资源(可能通过并行调用我的 WS)。该实现是一个 MYSQL .NET 连接器(在 C# 中)事务,包括插入到 EVENTS 和 EVENTonFIELD(在其他逻辑中)。

我遇到了一种情况,其中我有事务 A 和事务 B(两者相同:相同的用户 X、资源 Y 和时间 Z)。

执行事务 A(在我验证资源可用之后)。在此期间(tn A 尚未提交),事务 B 被执行(当我验证资源是否可用时,我看到它是可用的,因为 tn A 尚未提交)。然后 - A 已提交,B 已提交,并且:

我有这个用户的双重事件..

我不能在这里使用主键,因为在某些情况下我允许双重资源排序。任何想法如何防止这种情况?

我唯一想到的是在事务 B 期间,以某种方式还读取并行事务 (A) 并检查是否存在冲突.. 这可能吗?

谢谢!!

4

0 回答 0