0

我正在开发游戏的后端。玩家首先购买他们的门票,这些门票存储在数据库中,然后他们玩并可以获得某些奖品。每个玩家最多可以购买 60 张门票。

出现了一个新要求,为每场比赛的门票总数设定了一个上限——10 000 张门票。该实施将涉及向购买端点添加一个测试,检查当时购买的门票总数+当前购买所需的门票数量小于或等于该游戏的最大门票数量,以便购买被接受。

问题是,通过使用tickets表上的count计算当前购买的门票数量,返回的值可能是过时的,因为同时其他玩家可能已经购买了门票。

一种可能的解决方案是在购买期间锁定门票表,但这会对性能和用户体验产生负面影响。如果您有不同的想法,请告诉我。

4

1 回答 1

2

如果您的限制是硬约束,那么您必须避免同时进行多项购买。可能在数据库中适当的表锁是完成这种序列化的最佳方式。可能还有其他替代方案(即在前端某处执行序列化),但它们可能实现起来更麻烦,更容易出现错误,并且性能更差。

事实上,如果没有适当的数据库锁定,可能很难让你的游戏表现出一致的行为。另一方面,您可能不需要显式锁定。如果您使用适当的事务隔离级别配置数据库,那么它应该为您执行所有必要的锁定。

由于这里没有明显的胜利,我建议搁置性能问题,直到您可以实际测试您的性能。如果结果不够好,那么您可以从实际测量中确定系统的哪些部分最能从调整中受益。

于 2014-11-10T20:19:13.210 回答