现场比赛,使用内存或数据库或两者兼而有之?

live game, use memory or DB or both?

目前我正在使用 nodejs 和 socket.io

创建一个国际象棋应用程序

现在 运行 游戏信息存储在这样的数组中:

  games[token] = {
    'creator': socket,
    'players': [],
    'interval': null,
    'timeout': timeout,
    'FEN' : '',
    'PGN' : ''
  };

问题是:在创建游戏时将游戏信息保存到数据库并逐个更改字段值更好,还是在完成每场游戏后保存? 哪种方法更好?

如果您等到游戏结束才保存状态,那么您 运行 如果发生服务器崩溃之类的事情,您将面临丢失状态的风险。考虑未处理的异常或您无法控制的事情,例如容器重启或更糟糕的事情。

尽快保留您希望恢复的每一位数据。我可以想象一个角色扮演游戏,其中始终能够恢复玩家在地图上的确切位置并不是特别重要。看来你总是希望能够恢复你的棋局状态。

如果你想要防崩溃实现,最便宜的方法是在日志中写下每一个动作。游戏结束时,您保存状态并丢弃日志。在每个游戏开始时加载状态,然后检查日志中是否有任何内容,如果有则播放事件。

日志可以在数据库、磁盘或 Redis 等轻量级数据库中。