游戏数据 同步问题

游戏中游戏数据同步到数据库 [复制链接]

   

Rank: 1

跳转到指定楼层
1#
  发表于 2012-3-14 16:43:00  | 只看该作者  | 倒序浏览
游戏程序
平台类型:
程序设计:  
编程语言:  
引擎/SDK:  
通常我们做数据同步的时候有2种方法,实时更新到数据库和定时同步批量更新到数据

实时同步就不说了,数据库服务器压力会比较大。
定时同步的话,如果数据在同步前服务器宕机了,数据一般该如何恢复呢?
我的想法是这样
用共享内存开个buffer,将将要写入数据库的数据先存入buffer中,写线程从buffer中写入数据库成功会再从buffer中移除对应的数据
服务器临时宕机了我还是可以冲共享内存中恢复数据

不知道各位大虾都是这么处理同步的,求指教
 
   

管理员

GameRes站长

Rank: 9Rank: 9Rank: 9

2#
  发表于 2012-3-14 17:14:00  | 只看该作者

Re:游戏中游戏数据同步到数据库

如果是传统MMO端游,原理上差不多。

把需要保存的数据先送到缓存,然后由缓存不断写入数据库。

但是这样一样无法解决一些宕机的数据存储问题。
 
 
   

Rank: 1

3#
  发表于 2012-3-16 18:15:00  | 只看该作者

Re: 游戏中游戏数据同步到数据库

服务器宕机数据丢失,这就是传说中的数据回档,这种情况不可避免。
不过还是有其它的方法还减少这种问题,
1、采用数据库分布式存储,这样服务器多了,即时写数据库也没有太大的压力;
2、将要写的操作队列到另一台服务器,这台服务器有三个线程(主线程、日志线程、数据库交互线程),主线程负责接受你的写操作,然后将这条操作分发给另外两个线程,日志线程负责将数据写到当前磁盘(只写到文件缓冲区,当写操作数大于N或者N秒后则真正写到硬盘),数据库交互线程负责将数据写到数据库。这样的方式只是减少数据丢失,不能100%保证。
 
 
   

Rank: 1

4#
  发表于 2012-3-19 16:05:00  | 只看该作者

Re:游戏中游戏数据同步到数据库

加日志线程这种辅助会更安全点,我个人也比较认同

我个人有点疑问的是,为什么不能考虑共享内存的特性呢?
服务器在启动的时候前先检查共享内存是否存在,不存在就创建共享内存,否则继续使用原来的那块内存,原来的数据还是在内存中可以取得到,缺点是共享内存的页面大小有限,可以考虑用内存池
但前提是,共享内存的释放单独提出来,只有当运营维护的时候才释放

或者做虚拟的文件映射,服务器启动的时候用mmap加载文件,中间主线程有写操作时,将写操作按照一个结构映射到mmap的映射内存中,服务器退出的时候再从内存中保存到文件
 
 
   

Rank: 1

5#
  发表于 2012-3-20 12:56:00  | 只看该作者

Re:游戏中游戏数据同步到数据库

顶一下~~~
 
 
   

Rank: 1

6#
  发表于 2012-3-20 14:05:00  | 只看该作者

Re:游戏中游戏数据同步到数据库

顶一下~~~~~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值