前文提到,大多数游戏开发者会在关系型数据库如 MySQL 和键值型数据库如 Redis 之间做选择,这同样也是其他行业后端开发的通用选择。这些数据库是游戏后端数据库的最佳选择吗?还有没有其他数据库选项,能够更快地响应数据请求,更快地持久化数据呢? 文档型数据库非常契合游戏开发。包括 MongoDB、DynamoDB 在内的文档型数据库,越来越受到开发者的欢迎,在不少前沿应用程序中都有他们的身影。当我们封装好一个文档型数据库的调用库,并放入我们游戏项目的组件库中,会发现,开发者们会慢慢把原先存储在 MySQL 或是 Redis 中的数据,逐渐修改为使用文档型数据库进行存储,开发者完全不需要知道背后的原理,只需要知道使用它又快又好用就可以。
文档型数据库比 MySQL 更快!文档数据库作为后起之秀,技术层面上大多支持分布式集群存储,自动处理数据分片,相比于 MySQL 的本地存储,跨机器复制的方式更高效,扩展起来也更加方便。同步调用一次 MySQL 的接口,在正常表规模的情况下需要百毫秒的时间量级,而文档型数据库只需要十毫秒的时间量级,而且响应时间的抖动方差不大。
很快我们找到了解决方案,使用列式数据库存储这些需要分析处理的数据。列式数据库是以列相关存储架构进行数据存储的数据,区别于 MySQL 这类行式数据库。
例如一张表存储玩家的姓名、年龄、注册时间等信息,如果我们把单个玩家的信息紧紧的放在一个存储块上,那就是行式存储,只要我们知道某个玩家的信息存储在哪个块上,就能检索到他的所有信息。但如果我们想统计一下游戏玩家的年龄分布,那我们需要遍历所有的存储块,获取整张表的信息,这太慢了。
而列式存储,是让每个项目按分区的方式存储在相同的存储块上。如果我们需要统计年龄分布,那就只需要检索年龄的相关存储块,极大地提升了性能效率。