游戏中游戏数据同步到数据库 [复制链接] stormlk1983 新手上路 串个门 加好友 打招呼 发消息 电梯直达 1# 发表于 2012-3-14 16:43:00 | 只看该作者 | 倒序浏览 游戏程序 平台类型: 程序设计: 编程语言: 引擎/SDK: 通常我们做数据同步的时候有2种方法,实时更新到数据库和定时同步批量更新到数据 实时同步就不说了,数据库服务器压力会比较大。 定时同步的话,如果数据在同步前服务器宕机了,数据一般该如何恢复呢? 我的想法是这样 用共享内存开个buffer,将将要写入数据库的数据先存入buffer中,写线程从buffer中写入数据库成功会再从buffer中移除对应的数据 服务器临时宕机了我还是可以冲共享内存中恢复数据 不知道各位大虾都是这么处理同步的,求指教 收藏0 支持0 反对0 举报 sea_bug 管理员 GameRes站长 串个门 加好友 打招呼 发消息 2# 发表于 2012-3-14 17:14:00 | 只看该作者 Re:游戏中游戏数据同步到数据库 如果是传统MMO端游,原理上差不多。 把需要保存的数据先送到缓存,然后由缓存不断写入数据库。 但是这样一样无法解决一些宕机的数据存储问题。 举报 scgywx 新手上路 串个门 加好友 打招呼 发消息 3# 发表于 2012-3-16 18:15:00 | 只看该作者 Re: 游戏中游戏数据同步到数据库 服务器宕机数据丢失,这就是传说中的数据回档,这种情况不可避免。 不过还是有其它的方法还减少这种问题, 1、采用数据库分布式存储,这样服务器多了,即时写数据库也没有太大的压力; 2、将要写的操作队列到另一台服务器,这台服务器有三个线程(主线程、日志线程、数据库交互线程),主线程负责接受你的写操作,然后将这条操作分发给另外两个线程,日志线程负责将数据写到当前磁盘(只写到文件缓冲区,当写操作数大于N或者N秒后则真正写到硬盘),数据库交互线程负责将数据写到数据库。这样的方式只是减少数据丢失,不能100%保证。 举报 stormlk1983 新手上路 串个门 加好友 打招呼 发消息 4# 发表于 2012-3-19 16:05:00 | 只看该作者 Re:游戏中游戏数据同步到数据库 加日志线程这种辅助会更安全点,我个人也比较认同 我个人有点疑问的是,为什么不能考虑共享内存的特性呢? 服务器在启动的时候前先检查共享内存是否存在,不存在就创建共享内存,否则继续使用原来的那块内存,原来的数据还是在内存中可以取得到,缺点是共享内存的页面大小有限,可以考虑用内存池 但前提是,共享内存的释放单独提出来,只有当运营维护的时候才释放 或者做虚拟的文件映射,服务器启动的时候用mmap加载文件,中间主线程有写操作时,将写操作按照一个结构映射到mmap的映射内存中,服务器退出的时候再从内存中保存到文件 举报 mhq2hss 新手上路 串个门 加好友 打招呼 发消息 5# 发表于 2012-3-20 12:56:00 | 只看该作者 Re:游戏中游戏数据同步到数据库 顶一下~~~ 举报 mhq2hss 新手上路 串个门 加好友 打招呼 发消息 6# 发表于 2012-3-20 14:05:00 | 只看该作者 Re:游戏中游戏数据同步到数据库 顶一下~~~~~~~