现场比赛,使用内存或数据库或两者兼而有之?
live game, use memory or DB or both?
目前我正在使用 nodejs 和 socket.io
创建一个国际象棋应用程序
现在 运行 游戏信息存储在这样的数组中:
games[token] = {
'creator': socket,
'players': [],
'interval': null,
'timeout': timeout,
'FEN' : '',
'PGN' : ''
};
问题是:在创建游戏时将游戏信息保存到数据库并逐个更改字段值更好,还是在完成每场游戏后保存?
哪种方法更好?
如果您等到游戏结束才保存状态,那么您 运行 如果发生服务器崩溃之类的事情,您将面临丢失状态的风险。考虑未处理的异常或您无法控制的事情,例如容器重启或更糟糕的事情。
尽快保留您希望恢复的每一位数据。我可以想象一个角色扮演游戏,其中始终能够恢复玩家在地图上的确切位置并不是特别重要。看来你总是希望能够恢复你的棋局状态。
如果你想要防崩溃实现,最便宜的方法是在日志中写下每一个动作。游戏结束时,您保存状态并丢弃日志。在每个游戏开始时加载状态,然后检查日志中是否有任何内容,如果有则播放事件。
日志可以在数据库、磁盘或 Redis 等轻量级数据库中。
目前我正在使用 nodejs 和 socket.io
创建一个国际象棋应用程序现在 运行 游戏信息存储在这样的数组中:
games[token] = {
'creator': socket,
'players': [],
'interval': null,
'timeout': timeout,
'FEN' : '',
'PGN' : ''
};
问题是:在创建游戏时将游戏信息保存到数据库并逐个更改字段值更好,还是在完成每场游戏后保存? 哪种方法更好?
如果您等到游戏结束才保存状态,那么您 运行 如果发生服务器崩溃之类的事情,您将面临丢失状态的风险。考虑未处理的异常或您无法控制的事情,例如容器重启或更糟糕的事情。
尽快保留您希望恢复的每一位数据。我可以想象一个角色扮演游戏,其中始终能够恢复玩家在地图上的确切位置并不是特别重要。看来你总是希望能够恢复你的棋局状态。
如果你想要防崩溃实现,最便宜的方法是在日志中写下每一个动作。游戏结束时,您保存状态并丢弃日志。在每个游戏开始时加载状态,然后检查日志中是否有任何内容,如果有则播放事件。
日志可以在数据库、磁盘或 Redis 等轻量级数据库中。