上个周末看了下MySQL,安装了一个试了下,重点看了c测试程序已经mysql.h中的API,发现好简单,目前公司的游戏计划也是用mysql,但是要设计好一个给游戏使用的数据库模块,也不是简单的处理一下api就能了事的,游戏数据库由于存取特别频繁,在我看来,他的设计主要解决下面几个问题:
1、数据缓存的功能
想想那么平凡的数据存取,完全依赖数据库的直接操作,这个性能是可想而知的,所以应该建立起游戏服务器和数据库之间的一个桥梁(暂且命名为数据库前端),游戏服务器只跟数据库前端交互,数据库前端自己具有数据持久化的策略,不依赖于游戏服务器的操作。数据库前端在第一次取出原始数据后(如一个角色登录时的数据),将进行本地缓存,下次存取数据都是在本地进行,并不需要更新到数据库中,至于何时更新到数据库可以有数据库前端自行决定(当然也不排除游戏服务器发出持久化的通知)。
2、增量更新的功能
其实好多数据的提交中,有很大一部分的数据是没有改变的,如果在从前端提交数据到数据库的时候采取相应的增量更新的办法,应该对性能会有所提升,尤其是在几个游戏服务器操作同一个数据库的时候,因为异步的原因,增量更新能够保证数据的正确性。
3、抛包策略
游戏服务器有很多数据实在太过频繁,但是有些类型的数据的重要性一般,所以中途丢失一些也问题不大,在服务器数据交换比较频繁的时候完全可以抛弃一些,加快存取速度(不过有了前端后是不是可以忽略这点)。
4、数据分流功能
主要体现在游戏服务器的一些不同类型的数据存取可以通过不同的几个异步队列进行处理,这样即使由于数据库的某些操作延时,也只影响到操作所在队列,不会影响其他队列。
5、灵活的多前端,多数据库等支持
实现游戏服务器,数据库前端,游戏数据库之间的多对多关系,便于灵活的运用。
写完后个人感觉达到第1,2点后,这个数据库前端功能就已经比较强劲了。