阿里云数据库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年的厦门极致互动网络技术股份有限公司(以下简称“公司”或“极致游戏”),是一家集网络游戏产品研发与运营为一体的重点软件企业,公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中,公…...
leetcode230.二叉搜索树中第k小的元素
标签:二叉搜索树;中序遍历 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1…...
深入了解C++中const的用法
文章目录 一、C中的const如何理解?二、C中的const与C语言中的const有何区别?三、const与指针、引用的结合使用 一、C中的const如何理解? 在C中,const是一个关键字,用来表示常量性,意在告诉编译器某些变量或…...
adb连接逍遥安卓模拟器失败的问题解决方案
1、逍遥安卓模拟器进入系统应用,设置-关于平板电脑-版本号,连续点击3次以上,直到提示进入开发者模式,返回设置界面,进入【开发者选项】-【USB调试】开启,之后重启模拟器再次adb尝试连接。 2、android stud…...
【Go基础】Go算法常用函数整理
Go算法常用函数整理 使用 Go 语言编写算法题时,掌握一些常用的函数和用法可以大大提高效率。 1. 排序 (slices 包): slices.Sort(x []T): 对切片 x 进行升序排序。需要 Go 1.18 版本。T 需要实现 constraints.Ordered 接口,例如…...
【rust杂乱笔记】
code . 打开vscode fn main() {println!("hello world!") }loop{}循环; break跳出循环 // 引入三方库 use rand::Rng; // 引入标准库中的输入输出 use std::cmp::Ordering; use std::io;// main函数 先执行main函数 fn main() {// 打印的宏方法// 打印提示信息print…...
BFS算法题
目录 1.BFS 2.树里的宽搜 题目一——429. N 叉树的层序遍历 - 力扣(LeetCode) 题目二——103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) 题目三——662. 二叉树最大宽度 - 力扣(LeetCode) 题目四——…...
辅助函数:mapMutations,mutations里的方法映射到组件的methods中
或者,页面已经映射了该方法 ,直接在该页面使用该方法。也就是不用在组件函数中向仓库传递修改数据信息,直接使用映射过来的方法修改数据 修改标题 跟在methods中定义函数不一样调用mutations方法修改标题不一样,新修改的数据是要写…...
XX服务器上的npm不知道咋突然坏了
收到同事的V,说是:182上的npm不知道咋突然坏了,查到这里了,不敢动了。 咱一定要抓重点:突然坏了。这里的突然肯定不是瞬间(大概率是上次可用,这次不可用,中间间隔了多长时间&#x…...
2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程
2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程 一、赛项名称 赛项名称:信息安全管理与评估 英文名称:Information Security Management and Evaluation 赛项组别:高职教师组 赛项归属…...
Excel拆分脚本
Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件,使用快捷键(AltF11)打开脚本界面,选择要拆分的sheet,打开Module,在Module中输入脚本代码,然后运行脚本 Su…...
深入解析MySQL事务隔离级别与锁机制在银行账户业务中的应用
一、引言 在金融行业,尤其是银行账户业务中,数据的一致性和安全性至关重要。MySQL作为一种广泛使用的数据库,其事务隔离级别和锁机制在保证数据一致性方面发挥着重要作用。本文将针对银行账户查询与转账业务,探讨如何运用事务锁来…...
Linux 设备树
学习设备树之前你需要知道什么? 因为设备树描述了整个芯片和开发板等所有硬件信息内容,所以他的信息量是非常庞大的,RK的linux的设备树算下来大概就有九千多行,大家不要被这个数字给吓到,这些内容都是原厂工程师写的&a…...
Ollama管理本地开源大模型,用Open WebUI访问Ollama接口
现在开源大模型一个接一个的,而且各个都说自己的性能非常厉害,但是对于我们这些使用者,用起来就比较尴尬了。因为一个模型一个调用的方式,先得下载模型,下完模型,写加载代码,麻烦得很。 对于程序的规范来说,只要东西一多,我们就需要一个集中管理的平台,如管理python…...
面向对象进阶:多态
黑马程序员Java个人笔记 BV17F411T7Ao p129~132 目录 多态 多态调用成员的特点 调用成员变量 调用成员方法 理解 多态的优势 解耦合 多态的弊端 解决方案:强制类型转换 instanceof jdk14新特性,将判断和强转放一起 总结 多态 多态调…...
设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)
设置开发板网卡的IP,有两种方法。 方法一:临时生效 第一种方式是临时设置,只有本次有效,重启后又要重新设,命令为: ifconfig eth0 192.168.5.9设置成功后可以使用ifconfig命令来查看已设置的 IP 地址。 …...
Navicat for MySQL 查主键、表字段类型、索引
针对Navicat 版本11 ,不同版本查询方式可能不同 1、主键查询 (重点找DDL!!!) 方法(1) :右键 - 对象信息 - 选择要查的表 - DDL - PRIMARY KEY 方法(2&…...
二十七、Tomcat专题总结与拓展
文章目录 一、Tomcat设计思路总结1、Tomcat整体架构2、Tomcat设计思路 二、Tomcat源码设计精髓三、拓展:SpringBoot整合Tomcat源码分析四、拓展:SpringBoot整合Undertow实战1、Undertow概述2、SpringBoot集成Undertow2.1、引入依赖2.2、application.prop…...
WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现
文章目录 1、使用 Path 结合 ArcSegment 绘制圆弧1、属性解读2、静态圆弧3、动态圆弧4、运行效果5、圆弧两端点的形状2、总结1、使用 Path 结合 ArcSegment 绘制圆弧 1、属性解读 Path 是 WPF 中的一个标记元素,用于绘制复杂的几何路径形状,而 ArcSegment 用于描述 Path 中…...
Spring Boot 应用 “Connection is closed” 及 MySQL 空闲超时断开连接解决方案
在使用 Spring Boot MySQL HikariCP 的组合时,可能会在生产或测试环境中遭遇类似如下异常信息: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT ...]; SQL state [nu…...
【数据库】Oracle
文章目录 1. 批量更新 1. 批量更新 这种方式将所有更新操作放在一个事务中执行,减少了与数据库的交互次数,从而可能提高性能。此外,事务处理还可以确保数据的一致性和完整性。begin; update mytable set STATE 102,STATE_DATE now() …...
链式栈的实现及其应用
目录 一、链式栈结构模型 二、链式栈的实现 2.1创建 2.2压栈 2.3出栈 2.4判断栈是否为空 2.5查看栈顶 2.6释放栈 三、应用 链式栈实际上就是基于链表,压栈和弹栈可分别看作头插和头删,链表尾部就是栈底,头指针就是栈顶指针 一、链式…...
结构化的Prompt
资源库: AI 提示词-WayToAGI精选高效的AI提示词库,助力创作者和开发者解锁人工智能的潜力。通过我们的提示词和策略,优化您的AI工具使用效率,激发创意思维,提升产出质量。https://www.waytoagi.com/prompts?tag6 结构…...
ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复
ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复 在 2024 年 12 月 12 日上午的北京时间时段内,ChatGPT突发全球宕机,OpenAI致歉:已查明原因,正积极修复 官方证实了其备受瞩目的聊天机器…...
【实验16】基于双向LSTM模型完成文本分类任务
目录 1 数据集处理- IMDB 电影评论数据集 1.1 认识数据集 1.2 数据加载 1.3 构造Dataset类 1.4 封装DataLoader 1.4.1 collate_fn函数 1.4.2 封装dataloader 2 模型构建 2.1 汇聚层算子 2.2 模型汇总 3 模型训练 4 模型评价 5 模型预测 6 完整代码 7 拓展实验 …...
【中工开发者】鸿蒙商城app
这学期我学习了鸿蒙,想用鸿蒙做一个鸿蒙商城app,来展示一下。 项目环境搭建: 1.开发环境:DevEco Studio2.开发语言:ArkTS3.运行环境:Harmony NEXT base1 软件要求: DevEco Studio 5.0.0 Rel…...
SpringBoot 整合 MongoDB 实现文档存储
一、MongoDB 简介 MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解…...
鲲鹏麒麟安装ElasticSearch7.8.0
因项目需求需要在鲲鹏麒麟服务器上安装ElasticSearch7.8.0,考虑Docker方式安装比较简单,因此使用Docker方式安装 环境信息 操作系统:Kylin Linux Advanced Server release V10 (Tercel) Docker:18.09.0 [rootserver ~]# uname …...
NDN命名数据网络和域名的区别
NDN(Named Data Networking)网络的概念 NDN是一种新型的网络架构,也被称为命名数据网络。与传统的以IP地址为中心的网络架构不同,NDN是以数据(内容)本身命名为中心的网络架构。在传统网络中,我们通过IP地址来寻找主机设备,然后获取该设备上存储的内容。而在NDN网络中,…...
PyTorch基本使用-自动微分模块
学习目的:掌握自动微分模块的使用 训练神经网络时,最常用的算法就是反向传播。在该算法中,参数(模型权重)会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度,PyTorch 内置了名为 torch.autogra…...
关于linux kernel softlockup 的探究
1. 基本解释 softlockup:发生在某个 CPU 长时间占用资源,但 CPU 仍然可以响应中断 和调度器。软死锁通常不会导致系统崩溃,但可能会使系统响应变慢. 2. 驱动模拟softlockup 以下为代码实现 #include <linux/module.h> #include <…...
MySQL 时区参数 time_zone 详解
文章目录 前言1. 时区参数影响2. 如何设置3. 字段类型选择 前言 MySQL 时区参数 time_zone 有什么用?修改它有什么影响?如何设置该参数,本篇文章会详细介绍。 1. 时区参数影响 time_zone 参数影响着 MySQL 系统函数还有字段的 DEFAULT CUR…...
【计算机网络层】数据链路层 :局域网和交换机
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯局域网 🚦局域网…...
WebSocket、Socket、TCP 与 HTTP:深入探讨与对比
随着互联网技术的快速发展,现代Web应用对于实时通信的需求越来越高。传统的HTTP协议由于其无状态和请求-响应模式的限制,在实现高效、低延迟的实时通信方面存在一定的局限性。为了解决这一问题,WebSocket协议应运而生,它提供了一种…...
【开源免费】基于SpringBoot+Vue.JS在线办公系统(JAVA毕业设计)
本文项目编号 T 001 ,文末自助获取源码 \color{red}{T001,文末自助获取源码} T001,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
Vue指令
创建项目: vue init webpack 项目名称 element-ui npm i element-ui -saxios npm i axios1.1.3 -S vuex npm i vuex3.6.2 -S vuex持久化 npm i -S vuex-persistedstate4.1.0代理模版 proxyTable: {/api: {target: http://localhost:8081/,changeOrigin: true,pathRe…...
经典文献阅读之--ATI-CTLO(基于自适应时间间隔的连续时间Lidar-Only里程计)
0. 简介 激光雷达扫描中的运动失真,由机器人的激烈运动和环境地形特征引起,显著影响了3D激光雷达里程计的定位和制图性能。现有的失真校正解决方案在计算复杂性和准确性之间难以平衡。《ATI-CTLO: Adaptive Temporal Interval-based Continuous-Time Li…...
【GitHub分享】you-get项目
【GitHub分享】you-get 一、介绍二、安装教程三、使用教程四、配置ffmpeg五,卸载 如果大家想要更具体地操作可去开源网站查看手册,这里只是一些简单介绍,但是也够用一般,有什么问题,也可以留言。 一、介绍 you-get是一…...
右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统
一、项目名称 山西右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统 二、项目背景: 山西右玉光伏发电项目位于右玉县境内,总装机容量为200MW,即太阳能电池阵列共由200个1MW多晶硅电池阵列子方阵组成,每个子方阵包含太阳能…...
box 提取
box 提取 import json import os import shutilimport cv2 import numpy as np import pypinyinclass Aaa():passdef pinyin(word):s for i in pypinyin.pinyin(word, stylepypinyin.NORMAL):s .join(i)return s if __name__ __main__:selfAaa()base_dirrE:\data\dao\20241…...
【合作原创】使用Termux搭建可以使用的生产力环境(六)
前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(五)-CSDN博客我们讲到了如何美化xfce4桌面,达到类似于Windows的效果,这一篇将继续在上一篇桌面的基础上给我们的系统装上必要的软件,让它做到真正可以使…...
C#—索引器
C#—索引器 索引器(Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同…...
Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)
点击如下链接: https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧,请求免费的License 如果提示登录,请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…...
【CSS in Depth 2 精译_074】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(下):行内元素的间距设置
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 ✔️ 12.2 Web 字体12.3 谷歌字体 文章目…...
React 18
文章目录 React 18自动批处理并发特性Suspense 组件增强新 HookscreateRoot API 替代 ReactDOM.renderStrict Mode严格模式服务器端渲染改进性能优化 React 18 React 18 引入了一系列新特性和改进,旨在提升性能、改善用户体验,并简化开发流程。以下是 R…...
yolov,coco,voc标记的睡岗检测数据集,可识别在桌子上趴着睡,埋头睡觉,座椅上靠着睡,平躺着睡等多种睡姿的检测,6549张图片
yolov,coco,voc标记的睡岗检测数据集,可识别在桌子上趴着睡,埋头睡觉,座椅上靠着睡,平躺着睡等多种睡姿的检测,6549张图片 数据集分割 6549总图像数 训练组91% 5949图片 有效集9&#x…...
Pydantic中的discriminator:优雅地处理联合类型详解
Pydantic中的discriminator:优雅地处理联合类型详解 引言1. 什么是discriminator?2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中,有时我们需要…...
vue实现文件流形式的导出下载
文章目录 Vue 项目中下载返回的文件流操作步骤一、使用 Axios 请求文件流数据二、设置响应类型为 ‘blob’三、创建下载链接并触发下载四、在 Vue 组件中集成下载功能五、解释与实例说明1、使用 Axios 请求文件流数据:设置响应类型为 blob:创建下载链接并…...
Dify工具前奏:一个好玩的镜像,selenium
文章目录 按照惯例,闲聊开篇通义千问给出的回答,蛮有趣的。什么是selenium?使用场景缺点按照惯例,闲聊开篇 眼看就要过0点了,今天写点有把握的。 我先卖个关子,问你们一个问题: 我用mobaxterm或者其它的工具,ssh访问到远程服务器。但我想在那台机器上打开浏览器该怎么…...
警惕!手动调整服务器时间可能引发的系统灾难
警惕!手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制(JWT、TOTP) 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…...