游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6877|回复: 5

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

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-3-14 16:43:00 | 显示全部楼层 |阅读模式
通常我们做数据同步的时候有2种方法,实时更新到数据库和定时同步批量更新到数据

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

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

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2012-3-14 17:14:00 | 显示全部楼层

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

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

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

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

1

主题

8

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2012-3-16 18:15:00 | 显示全部楼层

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

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

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2012-3-19 16:05:00 | 显示全部楼层

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

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

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

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

0

主题

41

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2012-3-20 12:56:00 | 显示全部楼层

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

顶一下~~~

0

主题

41

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2012-3-20 14:05:00 | 显示全部楼层

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

顶一下~~~~~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-28 23:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表