导读 前端时间魔兽这个电影我相信大家都看过了哈,作为一个码农,有时候我也会去思考魔兽世界这个游戏背后他的一些设计和实现,比如他用什么数据库。当然真正用什么数据库这个我是不确定的,我们今天的主题是当游戏爱上MongoDB,所以我们只聊游戏如果采用MongoDB作为数据库有哪些好处。

我们知道,游戏的一个特点是需求变化快,为了保持玩家一直有新鲜感,需要不停的往游戏中加入新的元素。就拿一些MMO游戏的装备(道具)系统为例,假如使用传统的关系型数据库来存放这些数据,可能会面临需要经常做表结构修改这样的DDL操作。那如果采用MongoDB的话就不会有这个问题,schema-free的特性可以支持一个表(集合)内包含不同结构的文档。此外,MongoDB直接使用JSON格式进行数据交互,这也是最接近对象模型的,对开发人员来说非常友好。关于如何使用MongoDB进行数据建模可以参考TJ写的MongoDB进阶模式设计。

一些专有场景-道具自动过期和附近玩家

现在很多游戏都走游戏免费道具收费的模式,有很多类似道具自动过期的功能,这可以通过MongoDB的TTL索引来轻而易举的实现。同样,现在很多游戏使用地理位置来作为社交系统的一部分,比如附近玩家这样的功能。这也可以直接利用MongoDB的地理位置索引来做。MongoDB原生支持了这些功能,可以说非常方便。

高可用

以前玩魔兽世界的时候,每个礼拜二都要来一次停服维护。当时大家也习惯了,毕竟魔兽世界还是玩点卡的,游戏时间都是自己花钱买的。但对于现在的免费游戏来说,经常停服,可能玩家都会接受不了。对那些日流水好几位数字的游戏公司来说,时间就是金钱,停服维护可能就有种自己在不停烧钱的感觉。所以现在都要追求服务高可用,尽可能减少停服时间。数据库服务通常也是整个游戏服务中的一个重要环节。MongoDB的副本集是一个相当成熟的高可用架构,它通过一主多备结构保证服务的可用性,当主宕机后还存活的备会自动选举出新的主。


阿里云数据库MongoDB在MongoDB自身高可用架构下做了进一步增强。采用一主一备一隐藏节点的经典3节点配置,对外暴露两个VIP提供用户访问,在某个节点宕机时自动进行VIP切换,保证用户始终有2个节点可用。需要注意的是,这必须是用户正确配置成副本集访问模式时才生效。

高可扩展

说完高可用,我们来说说高可扩展方面。同样还是魔兽世界,想必很多早期玩家都体验过排队,之所以要排队,主要是因为服务能力不够导致。当然,这通常和数据库无关,不过,一个好的架构师是不会允许有某个环节出现明显的瓶颈的。MongoDB由于其数据相对独立的特性,相比于关系型数据库,较容易进行水平扩展。其Sharding架构已在很多生产环境中久经验证,业内有些公司对其进一步优化后已在管理上百PB的数据。对于运维人员来说也是相当友好,动态扩容和负载均衡都是自动进行的,用户只需要选一个好的shard key即可。

回档

运营游戏有时候会面临不得不对游戏进行回档这样的痛苦选择。因为程序不可避免会有bug的存在,如果有某个bug被恶意利用,亦或者是人皆会犯错误,某个GM不小心手抖发了大量RMB道具,都可能导致较大的经济损失出现。如果游戏不是很完善,没有一个更好的解决方案的情况下,这时候可能就要考虑对游戏进行回档了。对于数据库数据的回档来说,MongoDB提供了一个延迟副本集节点的设定来解决这个问题。即,将某个节点配置成落后于最新数据一定的时间量。

当然,这还是很粗粒度的,如果要精确回档到延迟时间内或者更早的时间点,甚至是任意时间点,就还要在备份恢复这块上做更多的工作。阿里云MongoDB近期会推出任意时间点恢复的功能,以满足包括这个场景在内的备份恢复需求,敬请关注。

运营数据分析

现在是大数据时代,通过数据分析辅助运营决策是必不可少的。在数据分析方面,MongoDB提供了Aggregation pipeline和Map-Reduce这两个强大的功能。其中Aggregation pipeline使用管道处理模型,提供了过滤、分组、排序等丰富的操作支持,具有较简单的操作性兼顾较好的性能,而Map-Reduce则可以使用JavaScript进行自定义处理,在灵活性上更胜一筹。

总结

综上所述,MongoDB有如此多的适合于游戏开发场景的特性,还等什么呢?

本文地址: http://www.linuxprobe.com/games-love-mongodb.html

疯狂了!当游戏爱上MongoDB会怎么样???相关推荐

  1. 当游戏爱上MongoDB–参会赢Kindle

    始于 2019 年底的新冠疫情改变了我们的生活方式,游戏成为了很多人排遣寂寞的一种方式,由此带来了游戏市场的异常火爆.游戏市场比拼的是谁能更快速地开发迭代,让玩家体验更佳,因此能够敏捷开发.快速扩展. ...

  2. 疯狂ios讲义疯狂连载之游戏的状态数据模型

    对游戏玩家而言在游戏界面上看到的"元素"千差万别.变化多端但对游戏开发者而言游戏界面上的元素在底层都是一些数据不同的数据所绘制的图片有所不同.因此建立游戏的状态数据模型是实现游戏逻 ...

  3. 勇猛的兔子的疯狂奔跑小游戏

    勇猛的兔子的疯狂奔跑小游戏 1.运行效果 2.游戏玩法 3.游戏截图 4.代码展示 HTML代码 CSS代码 5.项目下载地址 相关内容 1.运行效果 由于CSDN允许上传图片最大为5M,所以这里我就 ...

  4. Unity3D游戏开发初探—4.开发一个“疯狂击箱子”游戏

    一.预备知识-对象的"生"与"死" (1)如何在游戏脚本程序中创建对象而不是一开始就创建好对象?->使用GameObject的静态方法:CreatePri ...

  5. 源码推荐(1月24日):强大的动画饼图控制器 疯狂冰激凌小游戏

     iOS Bug 报告控件 BugshotKit   BugshotKit 是一款给开发者和测试者的 iOS 应用内 bug 报告工具,提供注释的截图和控制台日志. 测试环境:Xcode 5.0,iO ...

  6. 疯狂ios之疯狂打飞机游戏(3)

    13.14.7添加敌机 游戏当中怎么能少了千军万马的敌人呢?现在,我们来添加一些敌机,大量的敌机将从屏幕上方随机出现,并以随机的速度向下俯冲.这些敌机暂时不会发射子弹,之后读者可以自己添加该功能.具体 ...

  7. 微店新品!微店首款《疯狂野蛮人》横版动作游戏来啦!

    <疯狂野蛮人>周瑜作品,微店首款横版过关游戏,冒险盗玩法,二段跳跃,支持Tiled编辑关卡内容! 游戏名称:疯狂野蛮人 游戏类型:单机:平台:12关. 玩家扮演小野蛮人,通过各种陷阱(死亡 ...

  8. 9秒学院Html5游戏:一场可预见的疯狂

    Html5游戏:一场可预见的疯狂 历史 H5游戏的历史可以追溯到2010年,当时还未过世的乔布斯宣布苹果系统将不支持Flash,引得一片哗然,为此,乔布斯特意写了一篇<关于Flash的几点思考& ...

  9. “疯狂”的共享单车,又一场资本跑马圈地的游戏

    共享单车领域开启烧钱模式,似乎有点走网约车老路的意思. 10月底,共享单车领域第三位大玩家--小鸣单车宣布,正式登陆上海和广州,用户缴纳199元的押金后即可使用.并且从11月起,以每天数千辆的速度予以 ...

最新文章

  1. git remote 命令
  2. R 数据可视化 : 热图
  3. EMIF的两个接口EMIFA和EMIFB分析与比较
  4. mysql error 1236_解决MySQL数据库同步1236错误
  5. CSS左中右布局,规范案例
  6. linux之路由知识之ip route 命令中的疑惑
  7. 概率论 一维随机变量
  8. 【JUC】JDK1.8源码分析之ConcurrentHashMap
  9. 学习笔记_vnpy实战培训day01
  10. AR.js专题-多Renderer支持
  11. github 分支 合并
  12. 【数据分析入门】R语言下载与R包新旧设备转移
  13. stata 空间杜宾模型_利用STATA创建空间权重矩阵及空间杜宾模型计算----命令
  14. 计算几何——判断点是否在多边形内
  15. 平面设计师okr_为什么说一名优秀的设计师要懂得OKR
  16. P1196 [NOI2002] 银河英雄传说
  17. MT【258】椭圆第三定义
  18. 数据可视化之设计经验分享:轻松三步教你学会制作数据可视化大屏思路
  19. 亚马逊Amazon SP-API注册申请和授权对接开发和亚马逊SP-API开发人员注册资料的注意事项,PII申请的事项
  20. 402-字符串(题目:剑指Offer58-II.左旋转字符串、 28. 实现 strStr()、459.重复的子字符串)

热门文章

  1. apache+tomcat的架构
  2. Application Performance Management Monitoring | New Relic
  3. HTC Desire试玩手记之五(电池出叹号,充电灯不亮)
  4. 网络协议基础:“工作中模模糊糊的概念,这次终于理顺了!”
  5. MySQL分组查询—按函数分组
  6. OpenResty快速入门
  7. Eureka-服务发现
  8. Spring 工厂的相关的方法
  9. synchronized的基本认识
  10. MyBatis 实际使用案例-typeHandlers【重点】