微信小游戏爆款秘笈 数据库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, ...
随机推荐
- oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中
有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...
- UED团队规范设计参考及建议
公司产品线逐渐增多,变动频繁且并行开发,常常需要设计与开发能够快速的做出响应.同时这类产品中有存在很多类似的页面以及组件,可以通过抽象得到一些稳定且高复用性的内容.通过模块化的解决方案,降低冗余的生产 ...
- This 在构造函数中的固定用法
class Person{ String name; int age; char gender; public Person (String name){ this.name = name; } pu ...
- 【定时器】Quartz初步实验
第一步:创建项目 创建一个新项目,可以是ASP.NET MVC,WebForms,Winforms等多种.Net项目,这里使用的是VS2017,创建了一个MVC项目 创建完成后大致项目层级为: 第二部 ...
- Maven学习(三)-- 使用Maven构建项目
摘自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...
- Spark Streaming入门
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文将帮助您使用基于HBase的Apache Spark Streaming.Spark Streaming是Spark API核心的一个扩 ...
- HTML基础篇(标签和属性整--已剔除不被浏览器支持的部分)
行内元素有:a b span img input select strong 块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p HTML 参考手册- (HTML5 标 ...
- RabbitMQ (二)工作队列
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37620057 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与 ...
- cassandra 在window上的demo
Cassandra window使用 1. 下载:http://cassandra.apache.org/download/. 2. 解压后,bin目录下,cassan ...
- disk.go
package disk import "syscall" //空间使用结构体 type DiskStatus struct { Size uint64 Used ...