墨天轮访谈 | 腾讯张铭:带你揭秘王者荣耀背后的游戏数据库 TcaplusDB
分享嘉宾:张铭
腾讯数据库专家工程师,TcaplusDB产品负责人
整理:墨天轮社区
导读
大家好,我是腾讯TcaplusDB的产品负责人张铭,TcaplusDB是专为游戏设计的分布式 NoSQL 数据存储服务,目前广泛应用于王者荣耀、QQ飞车、火影忍者等数百款流行游戏。今天我的分享将分为四个方面:TcaplusDB整体介绍、TcaplusDB高性能与无损、TcaplusDB在游戏中的特色能力以及TcaplusDB的交付与服务。
TcaplusDB 整体介绍
游戏数据库(TencentDB for TcaplusDB,TcaplusDB)是专为游戏设计的分布式 NoSQL 数据存储服务,历经十年打磨并完全自研。
Tcaplus在腾讯游戏中有非常广泛的应用,比如大家所熟知的像王者荣耀,和平精英等等。当然除了游戏行业之外,在税务、区块链等政务类的场景也有一些优秀案例的落地。
TcaplusDB数据库能够满足在游戏的业务中OLTP全场景的数据存储要求。
如果您作为一个游戏或者互联网业务的开发者,不管是从接入层还是核心的模块,都可以将TcaplusDB作为一款主数据库使用。不管是在游戏中进行战斗,账号匹配结算、游戏系统,运营系统等场景应用,Tcaplus都能够满足对应的需求。
图1 TcaplusDB满足OLTP全场景的数据存储要求
1、TcaplusDB 的典型表结构及应用场景
TcaplusDB的结构整体上分为三个层级,第一个层级为集群,一般来讲是APP名或者游戏名;第二个层级是表格组,一般适用于分区,用于区分各种各样的区和组;第三个层级是业务表格,比如说游戏的背包表,用户表等等。
同时我们是一个多key多Value的数据库,支持若干个主键字段和若干个普通的Value字段。不仅如此,我们还做了一些增强,即在Value的基础上进行了扩展。
比如一个玩家有很多的背包,每个背包里有若干个道具,这是一个天然的嵌套结构,再用用户的表加若干嵌套字段来实现多层级嵌套的方式。这样我们便能极大地控制好读写放大的一个问题,使得我们运营效率能够最高最大化。
图2 TcaplusDB 的典型表结构
- 支持protobuf 对数据库表定义与访问
在数据库的定表与访问上面,可以使用Protobuf(Protocol Buffers,PB)表。Protocol Buffers 是Google开源的中立、与平台无关的、可扩展的数据描述语言,用于对结构化数据进行序列化,但更小、更快、更简单。
图3 Protobuf 进行定义与访问
- 支持 SQL 访问
为了兼容行业内大家的使用习惯,我们在原有这个PB的基础之上,推出了MySQL的兼容,也就是说您可以通过下载MySQL本身的驱动程序,通过客户端来访问数据库。
比如您可以用select或者delete的语句,通过sql driver 来连接,这里对多语言的支持做得非常好,基本上多语言都能够连接数据库。
图4 支持 SQL 访问
- 像SQL一样灵活定义索引
本地索引是在键值数据库中,用到的最多的查询方式是点查,您提供若干个主键字段或者是部分的主键字段,就可以去查询到单条或多条的记录这样一种方式,这个效率非常的高。
那第二种方式索引,可能他的能力功能和能力会非常强,称之为分布式索引或者叫做二级索引。它能够基于这个主键字段之外,指定任意的字段进行模糊匹配的查找,建设相关的索引,包括像条件查询,范围查询,模糊查询,聚合查询等等,都可以用到我们的分布式索引,比如查询好友的昵称等等。
2、TcaplusDB 的整体架构
Tcaplus整体上是一个以主备模式为主的数据库,分成两个数据的流向,第一个是数据流,即下图中的黄色线。第二条灰色线走的控制流,比如类似于扩容,缩容,建表删表等直接操作。
图5 TcaplusDB 整体架构
TcaplusDB:高性能与无损
1、无需分库分表,管理粒度细化到表
TcaplusDB是一款完全分布式的数据库,分布式的能力非常强。同时索引不同于大家常见的顺序索引等。我们的核心是一款哈希的索引。
基于这种哈希索引下,索引 本身底层技术架构决定了它在面对海量的读写的时候,效率会非常非常高。同时,我们把这种相对复杂的需要顺序索引所执行的一些操作,放到了我们的分布式索引这一块儿但是在主要的点查这块儿是基于哈希索引去做的。
同时我们的管理能够细化到表,也就是扩容和缩容,包括故障处理的一些级别,都是代表级的,这样的力度能够给运维成本带来优势。目前单表最多能够支持2.56PB,未来也会扩大它的容量,同时一个存储金仓可以管理多个shard,一个表可以分布在多个存储进程中。
图6 TcaplusDB 管理粒度细化到表
2、成本仅为关系型DB 的30%
基于内存加这个最终的SSD落地的结构,包括前面提到这种哈希引擎,可以让我们的整个在这种高性能读写的方面,也就是点查这种典型的场景之下,做到成本仅为关系型数据库的30%。
图7 TcaplusDB 的存储引擎结构
3、海量读写与稳定延时
同时TcaplusDB具备海量读写与稳定延时的功能。1小时扩100W QPS,应对快速变化的运营需求,同时支持读写分离,秒杀、红包、全球同服、实时对战等超高性能场景。
TcaplusDB在游戏中的特色能力
1、业务不停服
在APP或者游戏中,可能面临一个很大的问题,首先数据的表结构可能会升级,其次随着数据库本身的版本演进,数据库自身也会有变更,比如bug修复或者故障管理。
那在这样两种核心的场景下,不管您是做哪种变更,我们都能对您的这个业务实现无感化,让你的业务不需要停服,这是目前市面上很多数据库不具备的能力。
图8 TcaplusDB 实现业务不停服
2、海量并发下的大数据存储场景
非常多的用户在做选型时,他们的场景下单条记录非常大,需要在现网做频繁的变更,并且变更的量也非常大,因此没有办法使用类似的对象存储,而TcaplusDB可以支持海量并发下的大数据存储,
比如在游戏中,捏脸的数据非常细并且做了很多的细腻展出,这样会造成它的单条记录数据非常大,这时我们可以将它这样一套记录存储下来,再提供对外提供一个服务。
图9 TcaplusDB 在海量大并发场景下实现大数据存储
3、排行榜场景中的核心能力与优势
TcaplusDB具有记录玩家分数并实时更新与查询的核心能力,同时在差异化优势上,TcaplusDB表现在解决数据维护一致性问题,并对多个字段设定排序规则,解决Redis用户需要自行解决相同分数的方案。
图10 TcaplusDB 在排行榜场景的核心能力与优势
TcaplusDB 的交付与服务
1、一套DB,全球发行
TcaplusDB在整个的部署发行这里,能够为客户提供多种不同形式。
TcaplusDB云服务:
包括我们提供以云服务的形式,在腾讯云上有我们的这个云服务TcaplusDB商业版:
提供私有化部署的商业版。TcaplusDB社区版:
同时社区版目前也正在做,完全在您的这个IDC和CL的机房中去部署我们这一款数据库的产品。
图11 TcaplusDB 的不同发行版
为了方便这个开发者开发的话,我们也提供这个单机的版本,不管您是单机的Windows Linux,你可能需要一个四核8G左右的一个机器,就可以把我们的这个这个数据库从单机版部署起来,这样您可以在本地的这个云,或者是本地的这个IDC环境进行相应的一个开发调试的动作。
2、云模式下,灵活计费方案
在计费方式上分为两种,一种是标准集群,按量付费、高性价比;一种是按资源付费付费,稳定高性能。
图12 TcaplusDB 的不同计费方式
3、运营62个可用区,助力游戏全球化部署
依托于腾讯本身在全球的一个运营发行,我们支持到全球62个可能区,能够助力到大家的在全球化的发行和运营方面的一些需求。整体来说,我们这款数据库,它是一款键值数据库,我们在整个在游戏相关的领域上也做了非常多的深耕和细化,包括在高性能和低成本,再到游戏产品里都有体现。
最后大家如果想进一步的交流或者了解的话,可以扫下方图中的二维码,添加工作人员的微信,希望大家提供进一步的服务。
图13 TcaplusDB 更懂游戏的数据库
更多精彩内容,欢迎大家观看现场视频回放与会议资料
视频回放:https://www.modb.pro/video/6182
会议资料:https://www.modb.pro/doc/58646
- 查看原文:https://www.modb.pro/db/388139
- 查看【国产数据库沙龙】键值数据库专场文章、视频回放资源:https://www.modb.pro/topic/379708
了解更多可以进入墨天轮,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、活动直播、在线课程、文档阅览、资源下载、知识分享及在线运维为一体的统一平台,持续促进数据领域的知识传播和技术创新。
关注官方公众号: 墨天轮、 墨天轮平台、墨天轮成长营、数据库国产化 、数据库资讯
墨天轮访谈 | 腾讯张铭:带你揭秘王者荣耀背后的游戏数据库 TcaplusDB的更多相关文章
- Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输
腾讯王者荣耀的开发来来来出来聊聊,真是日了狗了,多次离上王者还差两三颗星的时候队友就开始水的一塌糊涂,对面就牛逼的不行. 又连跪回去了,被对面把屎都打出来了,实在忍不住来吐槽,你们这个排位匹配算法到底 ...
- 小案例带你揭秘JS事件
小案例带你揭秘JS事件 ### 什么是事件? 在js中一个事件的组成由那些呢? 谁触发事件:事件源 触发什么事件: 事件的类型 触发事件干什么事:事件处理函数 事件传播的过程 捕获阶段 就是从wind ...
- 腾讯高级工程师带你完整体验Node.js开发实战
Node.js拥有广大的 JavaScript程序员基础并且完全开源,它被广泛地用在 Web服务.开发工作流.客户端应用等诸多领域.在 Web 服务开发这个领域,业界对 Node.js 的接受程度最高 ...
- 腾讯工程师带你深入解析 MySQL binlog
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 本文由 腾讯云数据库内核团队 发布在云+社区 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的red ...
- 腾讯高级工程师带你玩转打包利器webpack
随着前端领域飞速发展,webpack将前端不断出现的新模块.新资源.新需求,进行自动化整合.梳理.输出,极大提高了我们的工作效率,成为前端构建领域里最炙手可热的构建工具. 不少人webpack 的使用 ...
- [报名中] 腾讯技术专家为你揭秘"音视频及融合通信技术"
| 导语 6月29日,北京东直门亚朵S酒店,云+社区邀您参加<音视频及融合通信技术>沙龙活动,深度探讨音视频及融合通信技术的发展及实践,领略前沿,共创价值. 数字多媒体技术的不断发展对音视 ...
- 腾讯优测干货精选|Android双卡双待适配——隐藏在数据库中的那些秘密
腾讯优测是专业的app自动化测试平台,除了提供兼容性测试,远程真机租用等多维度的测试服务,还有优分享-腾讯内部的移动研发测试干货精选~ 许多APP都希望获取用户通讯录联系人,利用通讯录关系链信息来丰富 ...
- 揭秘String类型背后的故事——带你领略汇编语言魅力
字符串或串(String)是由数字.字母.下划线组成的一串字符.一般记为 s=“a1a2···an”(n>=0).它是编程语言中表示文本的数据类型.在程序设计中,字符串(string)为符号或数 ...
- 带你揭秘Shiro(一)
提到Shiro,不得不先介绍RBAC介绍 RBAC介绍: RBAC是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的 ...
- 腾讯健康码16亿亮码背后的Elasticsearch系统调优实践【>>戳文章免费体验Elasticsearch服务30天】
[活动]Elasticsearch Service免费体验馆>>Elasticsearch Service新用户特惠狂欢低至4折>>Elasticsearch Service企 ...
随机推荐
- Jmeter二次开发函数 - 将指定时间转换为时间戳
1.达到效果:在jmeter的函数助手增加一个"timeStamp"函数,调用"timeStamp"函数可以将用户传入的时间转换为时间戳. 2.eclipse项 ...
- 8、SpringBoot2之打包及运行
为了演示高级启动时动态配置参数的使用,本文在SpringBoot2之配置文件的基础上进行 8.1.概述 普通的 web 项目,会被打成一个 war 包,然后再将 war 包放到 tomcat 的 we ...
- 【C3】03 如何构建
既然你已经了解了什么是CSS,以及使用CSS的基础知识,是时候更深入的了解该语言本身的结构了. 我们已经见过了本页讨论的很多概念:如果在之后对某些概念感到困惑的话,可以返回至此进行回顾. 前置知识 在 ...
- 【BatchProgram】工作用的小工具 - 自动访问常用页面
需求: 我需要打开很多页面,但是忘了收藏的话,每次都要重新去找一遍打开 页面很多,不是一两个了,为什么这么多?因为开发情况就是这样啊: 正式生产一个页面,UAT测试一个页面,本地调试一个页面 每日工作 ...
- 【Dos-BatchPrograming】04
--1.PING 主机联通性检测 Microsoft Windows [版本 10.0.19041.746] (c) 2020 Microsoft Corporation. 保留所有权利. C:\Us ...
- Rust项目的代码组织
学习一种编程语言时,常常优先关注在语言的语法和标准库上,希望能够尽快用上新语言来开发,我自己学习新的开发语言时也是这样. 不过,想用一种新的语言去开发实际的项目,或者自己做点小工具的话,除了语言本身之 ...
- 【转载】 校正Ubuntu时间为北京时间
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_37421762/article/de ...
- 纯css美化滚动条样式
https://www.emperinter.info/2020/09/20/scrollbar-in-browser/ 自己完善自己博客再Ipad等移动端的菜单时选用了左右滑动的菜单模式!当然就会使 ...
- 清除 Nuxt 状态缓存:clearNuxtState
title: 清除 Nuxt 状态缓存:clearNuxtState date: 2024/8/7 updated: 2024/8/7 author: cmdragon excerpt: 摘要:本文介 ...
- 使用 defineNuxtRouteMiddleware 创建路由中间件
title: 使用 defineNuxtRouteMiddleware 创建路由中间件 date: 2024/8/10 updated: 2024/8/10 author: cmdragon exce ...