微信小游戏爆款秘笈 数据库MongoDB攻略篇
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
本文由腾讯云数据库 TencentDB 发表于云+社区专栏
随着微信小游戏的爆发,越来越多开发者关注到MongoDB与小游戏业务的契合度。
腾讯云已为多个爆款微信小游戏提供服务,腾讯云数据库团队在多年MongoDB运营&支持微信小游戏服务经验总结,MongoDB产品经理李晓慧在7月26日在厦门举行的《腾讯云GAME-TECH游戏开发者技术沙龙》上,为广大开发者分享了腾讯云MongoDB在小游戏中的实践应用,帮助刚刚走进小游戏开发的同学们提供干货。

以下为分享内容要点:
一、为什么在小游戏开发场景下,使用MongoDB是比较合适的?

1.需求灵活多变:
如果使用Schema的数据库,那么每次需求变动都可能需要开发者去改数据库。带来得开发成本极大。
使用MongoDB这种no Schema的数据库可以在需求变动时不用更改数据结构,可以灵活增减字段,节约成本并提高效率。
2.附近的玩家:小游戏之所以爆发,很大一个因素是借助微信自带的社交元素,通过调用微信的API推荐好友ID和获取附近的玩家。
MongoDB原生支持GEO地理位置信息存储,同时还提供GeoSearch和GeoNear等API,可以获取用户附近玩家信息,用户可以方便通过API拉取好友ID和获取附近的玩家,使用起来非常方便。
3.海量数据支持&动态不停服升级:
很多开发者在小游戏上线前无法预测数据量,所以最初开始配数据库时都是标配,使用腾讯云数据库的MongoDB的分片集群,可以横向和纵向扩容,能够在不影响服务的前提下,把数据库扩展到很大。
4.运营数据分析支持:
MongoDB原生MapReduce功能,运营分析系统可以直接连过来使用数据进行分析,无论是用户登录数据还是行为数据轻松搞定。
5.nodejs完美支持:
6.nodejs和MongoDB是一起配合成长起来的。在小游戏的开发场景下,一般后面会有一个分布式的gameservice,前面配一个负载均衡,最后配多个MongoDB数据库。
二、腾讯云数据库MongoDB是如何助力TOP3的两款小游戏的?
在17年12月底到18年1月初,随着撒币答题直播兴起的同时,一款小游戏在微信好友圈高速发展,一跃成为TOP3的微信小程序。与此同时,因业务扩张太快,带来的操作响应慢确实让用户抓狂不已。腾讯云MongoDB团队在接收到客户的反馈后,迅速做出响应,通过优化MongoDB连接和创建读快照减少慢查询等操作,消除了小游戏卡顿的现象,助力客户拥有了上亿用户口碑的小游戏。因为靠着腾讯云产品过硬的功能和性能,以及优质的服务,腾讯云数据库MongoDB也为客户的另一款现象级微信小游戏带来峰值日活2kw且流水上亿 。腾讯云数据库MongoDB为微信小游戏提供:
1、 优化MongoDB的连接模型,支持更多的长连接。
由于原生MongoDB的后端连接模型分两部分,第一部分是Mongos对客户端的连接,第二部分是MongoS对Mongod的连接。对客户端的连接,采用的是one-thread-pear-connection,也就是每一个客户端连接打过来的时候,都会去建一个线程,每一个线程都会占用1MB的内存,所以当连接非常多的话,实例就会变得很卡。在后端建立连接的时候,是采用一个线程池的结构。每一个线程池,负责处理一个客户端的连接,然后每一个Worker里面又有N个线程池,每一个线程池又负责每一个Mongod连接。
腾讯云数据库MongoDB针对连接进行优化,优化后较原生的MongoDB可以多支持20%的长连接,让微信小游戏使用起来更顺畅,此优化让客户对腾讯云好感和信任度倍增。

\2. 读写分离,提高QPS,减少慢查询
一般原生MongoDB一主多从,如果不做任何操作,它会把所有的读写请求都打到primary上面,那么流量峰值来了,数据库主的写压力会非常大。客户就这个问题做了一个改善,把读引到了从上面,本以为这样会对主写的压力变小,然而却发生了游戏卡顿的现象。针对卡顿,腾讯云数据库MongoDB团队通过排查,发现当MongoDB主写压力非常大的情况下,从同步数据的压力也很大,此时MongoDB为了不让业务读到脏数据做了一个全局锁,导致业务的读操作就会被锁住,从而导致慢查询增多引起了小游戏卡顿。
腾讯云数据库MongoDB提供优化,从在回放Oplog的过程中,立即创建一个快照,所有的读都是读快照,不会被锁住。这个方案对效果优化是非常明显的。慢查询几乎没有,同时QPS是原来的2倍。这个优化目前已经申请专利。
腾讯云数据库MongoDB同时在只读实例上又做了优化方案:提供只读实例,此时只读实例会从主实例去同步数据,所有的读都打到只读实例上去。实际实现效果和读快照的方案性能差不多,此方案也在其他的小游戏大放异彩。

\3. 提供分片集群,业务量暴增时可灵活扩展
一款小游戏在未上线时候可能根本无法预估数据量,如果申请非常大的数据库会受到运维同事的挑战,但是如果后来量爆起来了,数据库扛不住压力时再进行扩容是非常麻烦的。为了更好的支持这种业务场景,腾讯云数据库MongoDB提供分片集群,在量还不会爆很多的时候,进行纵向扩容就可以满足需求。对于像客户爆款游戏,可以提供横向扩容,这时候使用分片集群,对线上业务几乎是无感知的。

\4. 提供库表回档,细粒度快速处理错误。
通常在业界MongoDB仅提供实例级别的回档,不管因为什么原因需要回档,客户均要通过整实例回档实现。作为目前国内提供MongoDB服务云厂商当中,唯一提供提供库表回档的腾讯云数据库MongoDB,为客户提供更细粒度回档服务。举个例子,例如有一天游戏的某个模块上线之后,发现有用户在刷钱,分析发现因为一个Bug引起的,此时如果直接强制性把用户的钱收回来,是非常不合理的,所以此时仅需要把这个bug引起的库表进行回档就可以。

\5. 提供表级监控,更精准、更细粒度监控业务健康度。
腾讯云数据库MongoDB是国内唯一提供表级监控的云厂商。业界大部分数据库仅提供实例级别的监控,监控实例的各种CRUD的操作,慢查询,延时,聚合操作。而多数微信小游戏在起步之初,通常是将多个小游戏的数据写在同一个实例里面,通过不同的库标管理不同的小游戏,此时表级监控相比实例监控对客户更有用和有效。

\6. 时序数据库CTSDB的应用
存储业务的日志和监控数据,客户使用腾讯云时序数据库产品方便存储业务的日志和监控数据。同时,时序数据库已经在烟草和电力行业实现规模部署。腾讯云数据库提供一系列的界面和日志采集工具方便大家使用。想详细了解这款数据库产品可以访问:https://cloud.tencent.com/product/ctsdb
最后,作为小游戏的开发者,如果你在数据库操作使用上有任何困难和疑问,不妨尝试一下腾讯云数据库产品和团队的服务,让我们携手共同为游戏客户提供更优质体验的娱乐产品服务。
访问以下链接或扫描下方二维码马上体验腾讯云MongoDB
https://cloud.tencent.com/product/mongodb

访问以下链接或扫描下方二维码马上体验更多腾讯云数据库产品
https://cloud.tencent.com/solution/database

问答
相关阅读
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1183448?fromSource=waitui
欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
海量技术实践经验,尽在云加社区!
微信小游戏爆款秘笈 数据库MongoDB攻略篇的更多相关文章
- 【沙龙报名中】与微信&云开发官方团队零距离互动,揭秘爆款微信小游戏背后的技术!
有人说 微信小程序游戏的百花齐放 活像十几年前的4399小游戏称霸互联网的景象 " 歪,斗地主吗,三缺二, 不用下app,小程序就能玩,我保证不抢地主让你抢!" ...... &q ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- 【转】利用 three.js 开发微信小游戏的尝试
前言 这是一次利用 three.js 开发微信小游戏的尝试,并不能算作是教程,只能算是一篇笔记吧. 微信 WeChat 6.6.1 开始引入了微信小游戏,初期上线了一批质量相当不错的小游戏.我在查阅各 ...
- 使用Laya引擎开发微信小游戏(上)
本文由云+社区发表 使用一个简单的游戏开发示例,由浅入深,介绍了如何用Laya引擎开发微信小游戏. 作者:马晓东,腾讯前端高级工程师. 微信小游戏的推出也快一年时间了,在IEG的游戏运营活动中,也出现 ...
- 用Kotlin破解Android版微信小游戏-跳一跳
前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新.不过,很快就有人发现,原来微信这次搞了个大动作——在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解版 ...
- pixi.js 微信小游戏 入手
pixi是什么?一款h5游戏引擎 优点:简单简洁性能第一 缺点:大多数用的国产三大引擎,pixi资料少,工具少, 为什么学,装逼 用pixi开发小游戏行吗? 行.但要简单处理下 下载官网上的 weap ...
- Egret白鹭开发微信小游戏分享功能
今天给大家分享一下微信分享转发功能,话不多说,直接干 方法一: 1.在egret中打开Platfrom.ts文件,添加代码如下(当然,你也可以直接复制粘贴) /** * 平台数据接口. * 由于每款游 ...
- Egret白鹭开发微信小游戏程序跳转功能(由一个小游戏跳转到另一个小游戏)
假设我们要实现的功能是从小游戏A跳转到小游戏B 对于小游戏A: (1)在platform.ts中添加代码如下: /** * 平台数据接口. * 由于每款游戏通常需要发布到多个平台上,所以提取出一个统一 ...
- Fundebug 微信小游戏异常监控插件更新至 0.5.0,支持监控 HTTP 慢请求
摘要: 支持监控 HTTP 慢请求,同时修复了记录的 HTTP 响应时间偏小的 BUG. Fundebug是专业微信小游戏 BUG 监控服务,可以第一时间捕获线上环境中小游戏的异常.错误或者 BUG, ...
随机推荐
- 单片机开发——03工欲善其事必先利其器(AD软件安装破解)
在单片机开发中,有了Keil的程序编程,Protues的模拟仿真,那么问题来了,怎么去进行电路图设计以及硬件调试呢?此刻就必须引入本文的Altium Designer (下文简称AD)安装与破解.在硬 ...
- 2、原生js实现轮播图特效
很多很多网站经常会用到一个特效,那就是轮播图,对于日新月异的前端技术来说其实就是一个框架一个接口的事,但轮播的原理是什么?用最原始的javascript来写又是怎样的呢?本人是一枚菜鸟,这篇文章就当做 ...
- 集成支付宝,报警告warning: (arm64) /Users/tommy/Desktop/Project/ios-msdk-git/AlipaySDK4Standard/AlipaySDK/Library/UTDI
集成支付宝的时候遇到的问题,找到了解决办法,还说明了原因,非常好,觉得应该记下来,反正以我的记性下次一定是会忘光光哒~ 1) Go to Build Settings -> Build Opt ...
- mysql 和 oracle 的一些小知识
有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到ORAC ...
- LoadRunner性能测试工具
1:LoadRunner是一款性能测试软件,通过模拟真实的用户行为,通过负载.并发和性能实时监控以及完成后的测试报告,分析系统可能存在的瓶颈,LoadRunner最为有效的手段之一应该就是并发的控制. ...
- springCloud系列 Config配置中心
1.config服务的部署 2.yum文件的格式 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 3.热部署 4.配 ...
- SSM-SpringMVC-03:SpringMVC执行流程一张有意思的图
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 上次的图也不全,这次的图也不是完整版,但是多了一个拦截器,我觉得挺有意思的,我就放上来了 他Handler ...
- IntelliJ IDEA 2018.1.2 安装及汉化教程(附:下载地址)
附:安装包及汉化包下载地址 链接:https://pan.baidu.com/s/1ysxtVH_gnBm0QnnqB5mluQ 密码: 9pqd 1.安装步骤: 选择安装地址:可以默认.本人安装在 ...
- 浅谈服务间通信【MQ在分布式系统中的使用场景】
解决的问题 一项技术的产生必然是为了解决问题而生,了解了一项技术解决的问题,就能够很轻松的理解这项技术的设计根本,从而更好地理解与使用这项技术. 消息中间件和RPC从根本上来说都是为了解决分布式系统的 ...
- sql复杂案例
工作中往往会遇到非常棘手的数据查询,运营人员不知道你的数据库表是如何设计的,也不知道你的数据库记录了啥数据,他只知道自己需要看什么数据,甚至有些数据根本就不存在. 单表查询的难度: 一张数据库的表ta ...