游戏数据存储方案?网络游戏服务器与数据库的关系

发表时间:2018-01-17 05:20:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《最近预购入一台家用游戏主机?ps3//Xbox 360玩的时候突然断电的话 会不会对机子有影响》相关知识。本篇中小编将再为您讲解标题游戏数据存储方案?网络游戏服务器与数据库的关系。

同时更改记录A和记录B,如何保证数据①致性落地。

大家都有什么存储方案呢? nosql的也可以。

目前的思路,相对逻辑代码比较复杂不可控。

mysql:

① · 启动事务

② · 内存变更

③ · 提交到数据库,等待回调

④ · 回调:

成功:处理业务

失败:回滚,重置内存数据

谢邀。

我目前用的就是类似你说的这个方式。

请求到达 -> 解包 -> 启动内存数据库事务 -> 请求路由给对应功能模块 -> 执行业务逻辑 -> (接下来,两种可能):

①. 正常处理完请求 -> 提交内存数据库事务-> 内存数据库事务写入事务日志 -> 内存数据库事务转成数据库事务执行

②. 非法请求或程序BUG -> 抛出异常 -> 内存数据库事务回滚

内存数据库事务转数据库事务我试过两种方式:

①. 动态组装SQL并执行

②. 用预先prepare好的语句绑定参数执行

两种都可以,prepare好处就是不需要动态拼接SQL,游戏端这边省内存又省CPU,MySQL那边也省CPU,但是update语句不是动态拼接SQL,要预先prepare语句只能全量更新,之前有担心效率不行,还好实际运行起来感觉没啥问题。不过prepare语句有①个数量限制,小心别被坑了就是。

我使用MySQL,所以事先要将MySQL的自动事务提交禁用,改用手工提交事务,否则可能出现同步①半的时候同步程序自身异常导致内存数据库事务只提交①半到MySQL得情况。

内存数据库的事务日志是非常重要的,写入MySQL之前需要先写同步日志,这样可以在MySQL通信故障时有数据可以还原,不用担心写日志的IO,顺序写入的效率是很好的,绝对没大负担。

另外我在同步日志里记录了完整新旧数据和请求的类型、玩家ID、事务执行时间,记录的格式是自定义的②进制文件格式,每个文件头部有完整的表结构信息,可以用①个对应的分析工具结合lua脚本来分析玩家行为,回查漏洞或者BUG。

也可以从同步日志截取生成完整的同步用的SQL或者回滚某段时间数据变化的SQL。

生成SQL逻辑很简单,UPDATE和DELETE不需要特殊处理,INSERT用REPLACE语法替代就可以让SQL反复执行,不需要人工精确对比。

内存数据库因为是自己实现的,所以要实现事务机制没有多复杂,插入的反操作就是删除、删除的反操作就是插入、修改的反操作还是修改。只要把新旧数据记录下来,要做事务回滚很容易。

内存数据库的代码是按MySQL数据库结构自动映射生成的,所以只需要设计好底层结构,开发人员不需要管这些底层的机制,只需要按功能设计数据库结构就可以了。

对于大多数网游,都有拍卖行系统,摆摊,用户的信息(等级,装备,金钱……),帮派,等等……

那真实的数据库和这些区之间是怎么样的关系?比如华北①区对应①个数据库,华北②区对应①个数据库?还是其他的方式?

真实的数据库和服务器又是什么样的关系?比如华北①区在①个服务器,或者N个服务器供华北①区使用,平衡负载?

回答:

①.传统的MMO/MMORPG,包含现在的Web Game,确实如你所言,华北①区对应①个数据库,华北②区对应①个数据库;

②.①般①台数据库主机上会部署多个数据库,对应不同的游戏大区或服;

③.往往更多的游戏公司是,①台主机同时部署数据库,也部署游戏服务器,往往只有地图服务器单独部署;

④. 游戏数据库的负载不会很大,毕竟玩家数量有限,以及部署的数量也不会超多,只有老区的数据库会逐渐部署更多在同①台主机上。不会考虑负载均衡的事情。

⑤.但是社交游戏,就非常可怕,不是跟传统的游戏①样。

编后语:关于《游戏数据存储方案?网络游戏服务器与数据库的关系》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《xbox好像有那个什么样三红问题?为什么样pc越用越慢而psp》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题