场景:基于网络的文字游戏
发生了什么,在步骤1中,一个应用程序从玩家A中移除了信用,将它们提供给玩家B,但在此之前持续存在于数据库中,第二个请求到来,加载状态仍在玩家帐户中显示10k A并从第2步请求1(0学分)和10k +战斗战略中覆盖正确的状态。结果:玩家A和B现在他们的账户中都有10k,这笔钱只增加了一倍。
可以做些什么来防止这种情况发生?这是假设问题的假设情景,对于sql会做的上述情况account=account+loot
,但我正在寻找适用于所有数据类型的解决方案。
答案 0 :(得分:2)
如果将数据库上的transaction isolation level
设置为可序列化,则可以将上述内容视为数据库级别的单个原子事件。
Atomicity是数据库系统的关键组件之一。