繁体   English   中英

如何避免数据库锁定

[英]How to avoid db lock

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

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

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

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

如果您的要求很严格,则必须避免同时进行多次购买。 在数据库中适当的表锁可能是完成此类序列化的最佳方法。 可能还有其他选择(即在前端某处执行序列化),但是它们可能实现起来更麻烦,更容易出现错误以及性能更差。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM