大家都知道游戏服务器需要做数据库连接池和cache。但是有一些特殊的数据检索,从cache中检索实现起来非常麻烦。
比如某个游戏有积分榜,这个积分榜客户端会以各种条件去请求,比如前100名哪些是我们工会的,哪些是好友,哪些是首轮注册的玩家等等……
这些条件用SQL语句很好实现,但是时事检索数据库会带来很大的开销。内存数据库非常适合这种数据量小,写入操作少,高并发的需求。在上述的例子中,服务器可以定期检索前n条排行数据放在内存数据库中,当客户端请求时,不用麻烦地根据条件查找cache,直接将SQL语句提交给内存数据库即可,省时实力、高性能还具备良好的维护性、扩展性。
常用的内存数据库有SQLite、H2、JAVADB等,作为嵌入式数据库各有优劣,这里推荐H2,它配置方便,性能够强,并且提供一个友好的WEB控制台,主页地址:http://www.h2database.com/html/main.html
有人说,为什么不用MYSQL的内存表实现,这里主要是需求数据库有内置性,随服务器程序启动,并且性能不能受数据库连接池和数据库服务器的影响。
放两个性能对比的图片,测试1000条需要数据库操作的并发报文:
通过MYSQL数据库:
通过内存数据库H2:
每秒处理报文数量从149提高到1295,性能提高了8.6倍。
不要在意1295这个细节,我电脑性能很差,加上开了好几个服务+eclipse+Android模拟器+一堆网页,实际放到服务器上,每秒5000以上无压力。
评论列表: