导读 | 前端时间魔兽这个电影我相信你们都看过了哈,做为一个码农,有时候我也会去思考魔兽世界这个游戏背后他的一些设计和实现,好比他用什么数据库。固然真正用什么数据库这个我是不肯定的,咱们今天的主题是当游戏爱上MongoDB,因此咱们只聊游戏若是采用MongoDB做为数据库有哪些好处。 |
咱们知道,游戏的一个特色是需求变化快,为了保持玩家一直有新鲜感,须要不停的往游戏中加入新的元素。就拿一些MMO游戏的装备(道具)系统为例,假如使用传统的关系型数据库来存放这些数据,可能会面临须要常常作表结构修改这样的DDL操做。那若是采用MongoDB的话就不会有这个问题,schema-free的特性能够支持一个表(集合)内包含不一样结构的文档。此外,MongoDB直接使用JSON格式进行数据交互,这也是最接近对象模型的,对开发人员来讲很是友好。关于如何使用MongoDB进行数据建模能够参考TJ写的MongoDB进阶模式设计。html
如今不少游戏都走游戏免费道具收费的模式,有不少相似道具自动过时的功能,这能够经过MongoDB的TTL索引来垂手可得的实现。一样,如今不少游戏使用地理位置来做为社交系统的一部分,好比附近玩家这样的功能。这也能够直接利用MongoDB的地理位置索引来作。MongoDB原生支持了这些功能,能够说很是方便。前端
之前玩魔兽世界的时候,每一个礼拜二都要来一次停服维护。当时你们也习惯了,毕竟魔兽世界仍是玩点卡的,游戏时间都是本身花钱买的。但对于如今的免费游戏来讲,常常停服,可能玩家都会接受不了。对那些日流水好几位数字的游戏公司来讲,时间就是金钱,停服维护可能就有种本身在不停烧钱的感受。因此如今都要追求服务高可用,尽量减小停服时间。数据库服务一般也是整个游戏服务中的一个重要环节。MongoDB的副本集是一个至关成熟的高可用架构,它经过一主多备结构保证服务的可用性,当主宕机后还存活的备会自动选举出新的主。
阿里云数据库MongoDB在MongoDB自身高可用架构下作了进一步加强。采用一主一备一隐藏节点的经典3节点配置,对外暴露两个VIP提供用户访问,在某个节点宕机时自动进行VIP切换,保证用户始终有2个节点可用。须要注意的是,这必须是用户正确配置成副本集访问模式时才生效。linux
说完高可用,咱们来讲说高可扩展方面。一样仍是魔兽世界,想必不少早期玩家都体验过排队,之因此要排队,主要是由于服务能力不够致使。固然,这一般和数据库无关,不过,一个好的架构师是不会容许有某个环节出现明显的瓶颈的。MongoDB因为其数据相对独立的特性,相比于关系型数据库,较容易进行水平扩展。其Sharding架构已在不少生产环境中久经验证,业内有些公司对其进一步优化后已在管理上百PB的数据。对于运维人员来讲也是至关友好,动态扩容和负载均衡都是自动进行的,用户只须要选一个好的shard key便可。
mongodb
运营游戏有时候会面临不得不对游戏进行回档这样的痛苦选择。由于程序不可避免会有bug的存在,若是有某个bug被恶意利用,亦或者是人皆会犯错误,某个GM不当心手抖发了大量RMB道具,均可能致使较大的经济损失出现。若是游戏不是很完善,没有一个更好的解决方案的状况下,这时候可能就要考虑对游戏进行回档了。对于数据库数据的回档来讲,MongoDB提供了一个延迟副本集节点的设定来解决这个问题。即,将某个节点配置成落后于最新数据必定的时间量。
固然,这仍是很粗粒度的,若是要精确回档到延迟时间内或者更早的时间点,甚至是任意时间点,就还要在备份恢复这块上作更多的工做。阿里云MongoDB近期会推出任意时间点恢复的功能,以知足包括这个场景在内的备份恢复需求,敬请关注。数据库
如今是大数据时代,经过数据分析辅助运营决策是必不可少的。在数据分析方面,MongoDB提供了Aggregation pipeline和Map-Reduce这两个强大的功能。其中Aggregation pipeline使用管道处理模型,提供了过滤、分组、排序等丰富的操做支持,具备较简单的操做性兼顾较好的性能,而Map-Reduce则可使用JavaScript进行自定义处理,在灵活性上更胜一筹。架构
综上所述,MongoDB有如此多的适合于游戏开发场景的特性,还等什么呢?负载均衡