首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
游戏服务器宕机数据恢复
时间:
2015-06-08 21:18:34
阅读:
108
评论:
0
收藏:
0
[点我收藏+]
标签:
0.概述:
一般情况下,为了提高游戏速度,在线玩家的数据都会缓存在内存中。如果有数据更新的时候,只更新内存中的缓存数据,而不是直接更新数据库。缓存数据会定时写回到数据库中(比如:5分钟写入一次)。 当服务器宕机后,从上次更新数据库到宕机前的所有数据更新都将丢失,即所谓的回档。这部分数据永远也找不回来了,通常都是服务器重启后给予所有玩家一定的补偿。
1.引子:
MySQL在对数据表内容进行更新的时候,也不是直接更新数据表本身的数据,而是先写入日志,然后更新数据表本身的数据。日志文件由于是对文件的顺序追加,所以速度很快。但是MySQL的数据更新因为是对文件的随机访问,速度自然会比较慢。这种机制可以保证MySQL在宕机后可以通过日志进行数据恢复。
2.游戏服务器宕机恢复:
游戏服务器缓存的玩家数据一般都是每几分钟写入数据库一次。如果这里能够借鉴MySQL那种设计,在玩家数据每次更新的时候都先写入更新日志,然后更新缓存数据,都执行成功后回复客户端消息。这样的话玩家数据丢失只包含了未来得及写日志的部分,这在很大程度少减少了游戏的损失。目前我想到了两种实现的方式,都列举如下:
A.每次数据更新时将更新数据的操作转化为SQL直接保存到日志中,同时累加一个全局的日志号。每次定时将缓存数据同步到数据库时,都会将最新的日志号同步写入玩家数据库中。当发生宕机时把日志中的所有大于数据库中日志号以后的更新,重新执行一遍,数据就恢复了。
B.将改变数据状态的消息作为日志内容写入日志中,同时设定全局日志号。每次将玩家数据同步到数据库时,将全局日志号也同步到数据库中(每个玩家自己保存自己的全局日志号)。当发生宕机重启后,每个玩家登陆时检测是否有数据丢失,如果有数据丢失就从日志中读取宕机前未能保存的消息执行(注意:执行这些消息不能下发消息给客户端)。但是这种方式在重启后登入用户比较多时可能会卡,因为很多宕机用户需要恢复数据。优点时宕机后可以迅速重启并接受客户端请求。另一种方式是服务器重启后先将宕机未能保存的消息重新执行,将数据恢复到最新,然后再接受客户端请求。
游戏服务器宕机数据恢复
标签:
原文地址:http://www.cnblogs.com/kiven-code/p/4561882.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!