阿里云数据库MongoDB版助力极致游戏高效开发
客户简介
成立于2010年的厦门极致互动网络技术股份有限公司(以下简称“公司”或“极致游戏”),是一家集网络游戏产品研发与运营为一体的重点软件企业,公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中,公司同时承担着游戏开发商、游戏运营商的角色,是一个完整产业链的互联网游戏公司。
自成立以来,极致互动成功研发出《上古王冠》、《魔侠传》、《道友请留步》、《文明大爆炸》、《东方故事》、《命运圣契》等多款原创型网络游戏。其中卡牌手游《命运圣契》自2024年9月14日上线以来,实现首月新增用户超400万 ,首月全平台流水破亿,荣登iOS与Taptap预约榜榜首。目前《命运圣契》可支持几十万、甚至上百万玩家同时在线。
业务挑战
近年来,游戏行业竞争愈发激烈,特别是在卡牌手游领域,因此需要保障玩家的极致游戏体验。在游戏的整个生命周期当中,游戏玩家的游戏体验和制作方的研发迭代速度及后台运维环环相扣,因此底层数据库的顺利运行是游戏体验的基础与保障。
在极致互动过往的游戏开发中,采用的是关系型数据库,而现在,研发团队需要一款能支撑快速开发及数据灵活的数据库,以确保在前期的开发中能缩短开发周期,在中期的发行中能保障游戏体验:
1)需要高效处理结构灵活变化的游戏数据
《命运圣契》属于第三代卡牌游戏,玩家角色属性、战斗数据和玩家排名等会经常发生变化,尤其是角色武器和道具的引入,都会带来游戏逻辑和数据结构等的动态变化。传统的关系型数据库无法支撑起游戏场景的灵活动态属性变化,需要能支持更高灵活性的数据库解决方案。
2)需要确保玩家的游戏体验顺畅,无中断无卡顿
游戏平台的部署架构需要具备高可用,能够在节点出现故障的时候不会影响服务,保证7*24小时不间断的服务,这对底层数据的存储、备份、恢复以及故障切换的速度要求特别高。例如,服务响应时间需要达到微秒级别,备份恢复达到分钟级别,还需要通过主从架构保证在不停服的情况下完成游戏版本的升级,从而保障玩家的游戏体验。
3)能够弹性扩展以支撑海量玩家在线
《命运圣契》是极致互动寄予厚望的产品,无论是老用户邀测、压力测试、全平台首发还是上线运营的各阶段,对数据库的资源需求是不同的,尤其是大型节假日高峰期,需要支撑几十万人同时在线,而且在初期需要对游戏玩家做分区分服,以及到后期的合服。虽然传统的关系型数据库能通过改造完成横向扩容,但是数据规模太大的情况下会带来非常繁琐的运维流程,这很可能会降低玩家的游戏体验。
解决方案
阿里云数据库MongoDB版深度契合游戏业务场景:
MongoDB帮助《命运圣契》落地丰富多彩的游戏世界
《命运圣契》的制作团队历时四年,创造出这款轻松休闲的卡牌游戏,人物建模和艺术风格值得称道。游戏采用鲜艳的色彩和细腻的角色设计,打造出一个充满奇幻色彩的世界,每个角色都经过精心设计,体现了独特的个性和故事背景。
● 玩家数据存储
与传统游戏开发有所不同,使用MongoDB去存储玩家的基础数据,例如角色数据、战斗数据、等级数据等,开发者可以灵活调整数据的结构,不同游戏可定义不同的数据模版。此外,得益于schema free特性,MongoDB支持多种数据类型和数据原子计算,开发者无需关心底层的数据细节,即可直接灵活定义数据。
● 游戏内经济系统闭环
假设把游戏内的经济系统理解为一个特殊的交易场景,处理游戏交易涉及订单、退款、跟踪回溯等多个环节,而通过MongoDB的原子化、事务性操作可以将整个交易流程一次性完成。虽然游戏内交易是虚拟的、复杂的,但采用MongoDB可以保证交易的规范性和完整性。
● 数据流能力
游戏开发者需要跟踪玩家的各种行为事件,以便形成流水日志,同时要保证玩家的所有事件可追溯、可查询。MongoDB的数据库实例,可将这些流水日志存储起来,并基于灵活的文档型结构,让开发者无论是在开发期间,还是游戏已经发行的期间,都可以快速检索玩家的所有事件流。
阿里云数据库MongoDB版让业务更稳定,运维更轻松
● 业务稳定性
基于阿里云数据库MongoDB版的分片集群架构,可以实现分钟级的横向扩缩容能力,对于《命运圣契》的发行至关重要,可以不用担心玩家规模的快速增加而影响玩家的游戏体验。
同时,阿里云数据库MongoDB版具备快速回档能力,可以实现快速的任意时间点恢复,通过其多线程增量恢复oplog等功能,备份恢复速度提升30倍,大幅度减少了游戏停更时间,保证玩家拥有更好的游戏体验。
● 运维成本
阿里云数据库MongoDB版简单易用的控制台可以实现全面托管服务,分钟级的自动扩缩容为《命运圣契》提供了低延迟和高可用的服务,兼容流量高峰期时保障用户体验及业务低峰时节约成本;
同时,阿里云数据库MongoDB版还提供丰富的可视化监控能力,包括实时可视化日志和监控面板,让研发和运维均可以实时监控业务运行状态;
除此之外,阿里云数据库MongoDB版还提供运行时间、状态异常等多维告警能力,使问题可以在最短的时间内被觉察及解决。
回顾与阿里云MongoDB的合作历程,极致互动成都研发中心技术经理汪兴表示,无论在功能还是性能上,阿里云数据库MongoDB版都很好地契合了游戏的业务场景,带给极致互动的不只是研发迭代效率的提升,同时还有运维价值。
阿里云数据库MongoDB版在不久的将来支持到MongoDB 8.0版本,极致互动研发团队期待借助新版本来开发更多的手游项目。随着《命运圣契》国内的发行成功经验,他们也正在计划让阿里云数据库MongoDB版帮助《命运圣契》走出国门,让海外玩家也能体验到高品质的第三代卡牌手游。
相关文章:

阿里云数据库MongoDB版助力极致游戏高效开发
客户简介 成立于2010年的厦门极致互动网络技术股份有限公司(以下简称“公司”或“极致游戏”),是一家集网络游戏产品研发与运营为一体的重点软件企业,公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中,公…...
ESP32-S3模组上跑通ES8388(29)
接前一篇文章:ESP32-S3模组上跑通ES8388(28) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析到了es8388_init函数中的第11段也是最后一段代码,没有解析完,本回继续解析。为了便于理解和回顾,再次贴出该片段,在components\audio_hal\driver\es8388\es8388.c中,如下…...

使用ElasticSearch实现全文检索
文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件,并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…...
通过k-means对相似度较高的语句进行分类
本文介绍了如何使用K-Means算法对相似度较高的语句进行分类,并附上java案例代码 import java.util.ArrayList; import java.util.List; import java.util.Random;public class KMeansTextClustering {public static void main(String[] args) {// 初始化语句数据集…...

国信华源科技赋能长江蓄滞洪区水闸管护项目验收成果报道
“碧水悠悠绕古城,闸启长江万象新。”近日,由北京国信华源科技有限公司倾力打造的万里长江蓄滞洪区水闸管护项目,圆满通过验收,为这片鱼米之乡的防洪安全注入了新的科技活力。 长江之畔,水闸挺立,犹如干堤上…...

HTML:表格重点
用表格就用table caption为该表上部信息,用来说明表的作用 thead为表头主要信息,效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 ,一般表格第一行的数据都是table heading...

wine的使用方法
wine版本 所有分支,新的主要版本: wine-x.0 All branches, release candidates:各分支、候选版本: wine-x.0-rcn Stable branch updates: 稳定分支更新: wine-x.0.z Development branch updates: wine-x.y wine *.exe “更改目…...

Linux服务器离线安装unzip包
Linux服务器离线安装unzip包 1. 安装unzip包的目的 解压Docker部署包和服务部署包。 2. 查看当前环境是否已经安装unzip rpm -qa | grep --color unzip3. 下载对应的离线包 地址:http://www.rpmfind.net/linux/rpm2html/search.php?query&submitSearch 例…...

Excel拆分脚本
Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件,使用快捷键(AltF11)打开脚本界面,选择要拆分的sheet,打开Module,在Module中输入脚本代码,然后运行脚本 Su…...

Mybatis---事务
目录 引入 一、事务存在的意义 1.事务是什么? 2.Mybatis关于事务的管理 程序员自己控制处理的提交和回滚 引入 一、事务存在的意义 1.事务是什么? 多个操作同时进行,那么同时成功,那么同时失败。这就是事务。 事务有四个特性…...
企业直播间媒体分发新闻转播拉流推广名单(金融财经科技类)
【本篇由 言同数字媒体直播分发 原创】随着直播与短视频成为各大企业营销的重要手段,如何选择合适的视频平台进行内容分发与拉流成为了企业关注的焦点。对于财经和科技类企业而言,选择具有专业受众群体和广泛传播能力的平台尤为重要。下面是一些可以帮助…...

华为FreeBuds Pro 4丢了如何找回?(附查找功能使用方法)
华为FreeBuds Pro 4查找到底怎么用?华为FreeBuds Pro 4有星闪精确查找和离线查找,离线查找功能涵盖播放铃声、导航定位、星闪精确查找、上线通知、丢失模式、遗落提醒等。星闪精确查找是离线查找的子功能,当前仅华为FreeBuds Pro 4充电盒支持…...
若依微服务登录密码加密传输解决方案
文章目录 一、需求提出二、应用场景三、解决思路四、注意事项五、完整代码第一步:前端对密码进行加密第二步:后端工具类实现 RSA 加解密功能第三步:登录接口中添加解密逻辑 六、运行结果总结 一、需求提出 在默认情况下,RuoYi 微…...

NVR小程序接入平台/设备EasyNVR深度解析H.265与H.264编码视频接入的区别
随着科技的飞速发展和社会的不断进步,视频压缩编码技术已经成为视频传输和存储中不可或缺的一部分。在众多编码标准中,H.265和H.264是最为重要的两种。今天我们来将深入分析H.265与H.264编码的区别。 一、H.265与H.264编码的区别 1、比特率与分辨率 H.…...

Redisson常用方法
Redisson 参考: 原文链接 定义:Redisson 是一个用于与 Redis 进行交互的 Java 客户端库 优点:很多 1. 入门 1.1 安装 <!--redission--> <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifa…...

html自带的input年月日(date) /时间(datetime-local)/星期(week)/月份(month)/时间(time)控件
年月日期控件 type"date" <input type"date" id"StartDate" valueDateTime.Now.ToString("yyyy-MM-dd") /> //设置值 $("#StartDate").val("2024-12-12"); //获取值 var StartDate$("#StartDate&quo…...
CSS系列(12)-- 响应式设计详解
前端技术探索系列:CSS 响应式设计详解 📱 致读者:掌握响应式设计的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 响应式设计,学习如何创建适应各种设备的网页布局。 响应式基础 🚀 视口设…...
filecoin boost GraphQL API 查询
查询示例 查询失败交易 curl -X POST \ -H "Content-Type: application/json" \ -d {"query":"query { deals(limit: 10, query: \"failed to get size of imported\") { deals { ID CreatedAt Message } } }"} \ http://localhost:…...
SAS - Subtractive Port
在SAS(串行连接SCSI,Serial Attached SCSI)协议中,subtractive port 是一种特殊类型的端口,主要用于设备间的路由功能。它的作用是在路径选择过程中充当默认路径,以处理未明确指定路径的请求。以下是它的定…...
TCP客户端模拟链接websocket服务端
因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了,需要研究下,以下是个人研究的方案。 用线上和本地地址来做例子: 线上wss地址:wss://server.cs.com/cs/vido/1 本地地址ws://127…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技
无需布线的革命:电力载波技术赋能楼宇自控系统 在楼宇自动化领域,传统控制系统依赖复杂的专用通信线路,不仅施工成本高昂,后期维护和扩展也极为不便。电力载波技术(PLC)的突破性应用,彻底改变了…...