12
2013
07

游戏服务器中,内存数据库的用途

大家都知道游戏服务器需要做数据库连接池和cache。但是有一些特殊的数据检索,从cache中检索实现起来非常麻烦。

比如某个游戏有积分榜,这个积分榜客户端会以各种条件去请求,比如前100名哪些是我们工会的,哪些是好友,哪些是首轮注册的玩家等等……

这些条件用SQL语句很好实现,但是时事检索数据库会带来很大的开销。内存数据库非常适合这种数据量小,写入操作少,高并发的需求。在上述的例子中,服务器可以定期检索前n条排行数据放在内存数据库中,当客户端请求时,不用麻烦地根据条件查找cache,直接将SQL语句提交给内存数据库即可,省时实力、高性能还具备良好的维护性、扩展性。

常用的内存数据库有SQLite、H2、JAVADB等,作为嵌入式数据库各有优劣,这里推荐H2,它配置方便,性能够强,并且提供一个友好的WEB控制台,主页地址:http://www.h2database.com/html/main.html

有人说,为什么不用MYSQL的内存表实现,这里主要是需求数据库有内置性,随服务器程序启动,并且性能不能受数据库连接池和数据库服务器的影响。

放两个性能对比的图片,测试1000条需要数据库操作的并发报文:

通过MYSQL数据库:

image

通过内存数据库H2:

image

每秒处理报文数量从149提高到1295,性能提高了8.6倍。

不要在意1295这个细节,我电脑性能很差,加上开了好几个服务+eclipse+Android模拟器+一堆网页,实际放到服务器上,每秒5000以上无压力。

« 上一篇下一篇 »

评论列表:

1.epcdiy  2013-7-17 13:04:30 回复该留言
我做服务器的,用过redis也用过boost的共享内存
2.highkay  2014-3-6 11:18:47 回复该留言
redis是在插入的时候排序的,mongo做运营日志分析也完爆mysql,hbase太重量级了。嵌入式的数据库比较适合桌面项目或者做单元测试,生产中的可维护性不是很好,对运维不友好,分离设施和应用是趋势。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。