1

对于在线订购音乐会座位或机票,我们需要记录级别锁定还是交易足够好?

对于演唱会门票(比如说,20B 号座位),或者机票(例如超额预订,限制是 210,例如),我认为网站在显示购票屏幕时无法锁定任何记录或开始交易。

但是用户点击“Confirm Purchase”后,服务器应该Begin a Transaction,Purchase Seat Number 20B,并尝试Commit。

如果另一个用户在之前的交易中已经购买了Seat 20B,那么当前交易会失败的是“提交”部分吗?

所以...我们不需要记录级别锁定?事务是否总是序列化(一个接一个),这就是为什么我们可以确定没有“竞争条件”的原因?那么在什么情况下需要记录级别锁定呢?

4

1 回答 1

0

在插入行之前,您可以检查具有相同 SeatId 的条目存在的位置。如果存在则回滚,否则插入行并提交。我什至不是 Cofident,我认为如果服务很忙,您可能需要在开始插入操作之前锁定。

然而,还有一个令人兴奋的第二个选项

你维护一个showIdseatId 用这两个做一个索引。并在此索引上创建一个唯一的约束。现在使用任何锁定启动事务。如果存在重复。由于独特的约束,它显然会失败。并且提交将不成功。

尼尔

于 2010-07-02T17:22:14.903 回答