【发布时间】:2015-01-07 05:41:47
【问题描述】:
我正在开发游戏的后端。玩家首先购买他们的门票,这些门票存储在数据库中,然后他们开始游戏并赢得某些奖品。每个玩家最多可以购买 60 张门票。
出现了一个新要求,为每场比赛的门票总数设定了上限 - 10 000 张门票。该实施将涉及向购买端点添加一个测试,检查当时购买的门票总数+当前购买所需的门票数量小于或等于该游戏的最大门票数量,以便购买被接受。
问题是,通过在tickets表上使用count计算当前已购买门票的数量,返回的值可能是过时的,因为此时其他玩家可能已经购买了门票。
一种可能的解决方案是在购买期间锁定门票表,但这会对性能和用户体验产生负面影响。如果您有不同的想法,请告诉我。
【问题讨论】:
-
您是否考虑过使用Semaphore,而不是在数据库级别锁定?
-
如果你有身份并且你从不删除身份,而不是做一个计数,你可以 max 和 min 然后简单地相互扣除以立即得到计数。
标签: java concurrency locking db2 dirtyread