我想知道如何处理SQL数据库中的资金以保持一致性。我想表格看起来像下面这样。
考虑以下场景:如果两个玩家正在玩,那么他们下注的钱已从他们的两个balance_usd
中扣除并添加到pot_usd
中。但假设服务器在手中间出现故障。这里数据库的一致性可能意味着pot_usd
中的钱应该退还给两个玩家,balance_usd
有效地取消手牌。似乎仅靠交易并不能解决这个问题。扑克服务器的后端应该如何构建来处理这个问题?
table user
user_id
balance_usd
table game
game_id
pot_usd
...
为了应对这种可能性,您可以有一个CurrentGameStakes
表,其中包含玩家ID和质押金额的字段。然后,当手牌完成后,您将总赌注转移给获胜者,如果游戏由于某种原因没有完成,您将赌注金额退还给每个玩家。
游戏开始时跟踪balance_usd和pot_usd。如果游戏被取消,则只需恢复这些值即可。如果它运行到完成,则从用于跟踪它们的表中清除记录。