未加星标

MMO网络游戏服务器中mysql数据库访问的性能优化探讨

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二04 | 时间 2019 | 作者 红领巾 ] 0人收藏点击收藏

问题:

和一些做mmo大型网络游戏服务器端的人讨论了一些mysql数据库访问的问题,因为我本人没有实际开发大型网游的经验,所以他们说的我也理解的不深,我还是努力理解,但还是觉得他们所谈的好象并不是那么一回事;

mysql数据库的访问一般就通过他提供的c api接口访问就可以了,网络游戏服务器端事先和mysql建立并保持1个或者几个连接,正常情况下这些连接将一直保持;

为提高性能,网络游戏服务器程序启动后一般都会把事先需要的数据从数据库提取到内存供使用,以减少读数据库的频率,这到好理解;

当然,网游开发中,遇到需要立即写库或者更新库的内容时,我们会立即向数据库服务器发送insert,delete,update等以期望数据库能立即更新我们的数据,比如玩家切换到新地图,这种数据就有必要立即提交到数据库;

但同时,有些有实践经验的网游服务器开发者也重点提出了提高开发mysql服务器程序效率的做法,用他的话说就是所谓的:

(1)“写到数据服务(这个数据服务器似乎就是他自己程序中缓存,用来缓存一些所要提交的数据)中,并不直接写库,因为数据库不是你想象的那么高效”

(2)业务服务实时写数据库,数据服务定时存盘 比如5分钟保存一次;

在这里业务服务实时写数据库到也好理解,就是将必要的东西理解写入,但“数据服务定时存盘”的意思就是对于一些不是特别紧急的数据库语句,每5分钟向数据库写一次;

我所疑惑的是:

(1)在网络游戏中什么样的数据算是数据服务,比如玩家拾取了一把武器,我需要insert该武器数据到玩家对应的武器表,但按照这个说法,就是我不立即insert,而是攒一攒,到5分钟后才提交一次;

(2)这种数据服务定时存盘 比如5分钟保存一次的做法真的能提高数据库的效率吗?因为对于写数据库(insert,delete,update)我通常都是直接执行mysql c++ api"mysql_query"立即提交,我这种做法难道确实是很影响效率,是一个很失败的做法吗?(因为该人说我这种在业务进程中直接写库的做法有问题,数据库若不堪压力会崩掉)

那么5分钟提交一次的做法有什么明显的好处,能否举个例子告诉我哪些数据可以5分钟提交一次呢?

请各位帮忙解释和指导,谢谢!

回答1:

一般都会有Session服务器的,相当于一个内存数据库

而DB是用来持久化数据的,第二次Server重启,初始化Session

你可以想一下如果没有Session会怎么样?

当然,游戏可以玩,只是效率会低很多,因为不管是什么MySQL/Oracle,在并发上面没有本质的区别,效率太低.

所以要把数据缓存起来.

而把变化的数据写入到DB里面,为什么要几分钟一次呢?还是因为DB的效率太低了的缘故

回答2:

数据服务即:

数据服务中心,它负责所有数据统一管理,提供实时的数据读写,多服务器环境下数据服务中心的处理能力,直接关系到整个集群系统的性能.所有的关键数据库访问都它包装,一般对内存需求和很大,因为有大量数据要在内存缓存.

回答3:

我也有跟楼主有类似的疑问。

数据服务 也就是 大家常说的 DBServer 。

游戏中数据改变的操作有 insert,delete,update。

问题:

“定时的数据存盘” 意思是

1、定时的去把积累的这些( insert,delete,update)操作 在数据库执行吗?

2、还是说把 DBServer在内存中维护的玩家数据,全部更新到数据库呢?

如果是按 1猜想,那么如何才能维护好DBServer中内存数据呢。我想要保持内存和数据的同步的话,DBServer在接到要更新数据的请求的时候,是不是既需要执行sql操作,也需要执行更新内存的操作,这明显增加了工作量了。

如果是按 2猜想 要维护好数据库中的数据 就会大量增加对数据库的delete和insert操作了吧?这样数据库岂不是更加容易崩溃?

或者都不是我想的这样,那究竟是怎样会相对合理呢?求教大侠们

社区交流群:221273219

Golang语言社区论坛 :

www.Golang.Ltd

LollipopGo游戏服务器地址:

https://github.com/Golangltd/LollipopGo

社区视频课程课件GIT地址:

https://github.com/Golangltd/codeclass
MMO网络游戏服务器中mysql数据库访问的性能优化探讨

Golang语言社区

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

代码区博客精选文章
分页:12
转载请注明
本文标题:MMO网络游戏服务器中mysql数据库访问的性能优化探讨
本站链接:https://www.codesec.net/view/627954.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(283)