通用问题
1. 什么是TcaplusDB?
游戏数据库(Tcaplus Database,TcaplusDB)是腾讯专为游戏设计的分布式NoSQL数据库,针对游戏业务爆发性的增长和海量游戏数据管理提供高性能、业务无感知弹性伸缩、毫秒级读写延时与安全的数据存储服务,广泛应用于腾讯数百款游戏中,包括《和平精英》、《王者荣耀》、《穿越火线》等数百款精品游戏中,每天支持超过4000万用户同时在线的数据请求。
2. TcaplusDB适合哪些场景?
手游、端游、页游,支持分区分服与全区全服部署方式,同时也支持非游戏领域中高并发、低延时访问要求的使用场景。
3. 相比Redis+MySQL作为游戏数据库,TcaplusDB有哪些优势?
- TcaplusDB采用内存加高效SSD云硬盘混合部署的方式,能同时满足数据快速读写与持久化存储的需求;
- 对于关系型数据库用户,TcaplusDB提供类SQL的命令行工具Tcaplus Client,用户可无缝切换执行CRUD操作;
- 用户不需要担心表文件过大导致查询加载缓慢的问题,TcaplusDB支持单表大小高达2.56PB,且不会降低查询效率;
- Redis+MySQL扩容需要手工干预且无法满足业务突增场景且使用成本高昂,TcaplusDB用户只需要关注业务开发,数据库的扩容和性能优化全部后台由专业的DBA完成.
4. TcaplusDB如何保证数据安全?
- 数据容灾: 集群主从节点主要采用同城跨IDC部署(或跨机架、跨楼层方式,主从节点同步延时最多10ms),每15分钟binlog备份,每天全量冷备;整个集群各个模块都是无损升级与扩缩容,用户业务无感知;
- 数据一致性:主从数据实时同步并采用req/ack机制确保数据完全一致;主从切换时会确认主从数据一致后再进行切换;故障发生时基于冷备+binlog流水重建方式进行数据恢复,保障数据完整性;主从数据会进行周期性一致性全量核对,并有异常修复机制; 用户请求层面,根据实时反馈的响应码判断数据操作是否正常;
- 数据内容安全: 数据落地CRC校验防篡改; 数据文件存储采用谷歌Snappy压缩,且数据读写压缩或解压缩后会采用序列化和反序列化操作,即使数据文件被劫持也无法解析数据内容;
- 访问安全:集成腾讯云用户权限管理体系CAM;TcaplusDB后台支持基于IP白名单访问,即指定IP客户端读写TcaplusDB数据;表格组内的数据交互均需密码验证,所有用户操作均有审计日志;
- 外部合规:数据文件会采用aes-128-cbc加密,满足欧盟GDPR标准。
5. TcaplusDB API各版本字段大小限制
- 小于Tcaplus 3.32.0 API,单个value字段128KB,单条记录256KB
- 大于等于Tcaplus 3.32.0 API但是小于Tcaplus 3.40.0 API,单个value字段256KB,单条记录1MB
- 大于等于Tcaplus 3.40.0 API,单个value字段,单条记录10MB
6. 目前TcaplusDB的发送缓冲区和接收冲区大小分别是多大?
- 目前gameserver与单个tcaproxy的发送和接收缓冲区是10MB
8. 批量接口的错误码怎么使用?
批量接口的错误码分为两种:总错误码和子操作错误码。当至少一个子操作成功时,总错误码为成功;当所有子操作都失败时,总错误码为失败。总错误码可以通过response的返回值获取,子操作错误码通过获取单个record的返回值得到。
9. tcaplus表的一级字段数量上限是256?
目前一个表最多支持256个一级字段
10. 请问对于一个游戏来说,tcaplus最多支持多少连接数
默认一个proxy最多支持3000个连接,但是可以通过修改配置调大proxy的连接数,同时,一个api实例目前最多连接200个proxy;如果需要更多一般通过调节每个gamesvr连接的proxy个数即可,支持上万个gamesvr的连接。业务上线时告知dba或者tcaplus_helper业务侧gamesvr的总个数和每个gamesvr中tcaplus实例的个数即可
11. Tcaplus访问数据库是并行的吗?
支持并行,API端每个连接(会话)的请求是串行的,不同连接是并行的。在API端,连接不是线程安全的,不用多线程使用同一个连接
12. 一个shard可以存储多大数据量?
单个shard最大可以存256GB的数据,一般推荐数据量维持在10GB以内。注:shard是有初始空间的,但不是固定的,和具体设置的表引擎参数有关的,比如hash桶设置数量等。 一个表最多支持10000个shard,每个shard 256G,Tcaplus DB是分布式数据库,没有行数限制。
13. TcaplusDB的pb版本对于不同版本的兼容性如何?
pb是前后兼容的
14. 请问跟int相比,用string做tcaplus的primary key或者sharding key,有什么需要注意的吗?
跟int相比的性能差距不大,总体原则: key不要太长。
15. 一张表的数据量很大,比如10亿条记录,导致一个物理机器的放不下,那么tcaplus这边会把这些数据分散到多个物理机器上吗?
在运营过程中可以加机器,把数据分散到新存储上,每组存储都是主从模式。
16. 主从数据实时同步的时候,若主机器因为物理原因宕机了,理论上可能会有短时间的数据丢失吗?
理论上是存在短时间数据丢失的,是最终一致性的同步。因为是先写内存,之后系统刷盘。如果主机挂了,马上会主从切换。
17. 如果Tcaplus远端的meta版本更高,而本地svr的tcaplus meta版本更低,中间有差异的这部分数据会存入tcaplus_db吗(例如新增了一个字段)?还是会被直接舍弃掉?
以默认值写入
18. 关于表定义中的分表因子,未定义时有默认分表因子吗?已有的表splittablekey可以再新增字段吗?
TDR表:没有定义分表因子字段,系统默认将主键字段作为分表因子字段 PB表:没有定分表因子字段,多个本地索引中的交集字段为分表因子字段,若没有定义本地索引交集字段则还是默认主键是分表因子
表splittablekey一旦定义不能修改,不能增加和删除
19. 关于list表变更时,首次新增customattr2中定义listnum的注意事项:
list表的元素个数可以改大,但是首次新增customattr2做表变更时先不能改大customattr2中的listnum,变更成功后再修改customattr2中的listnum,否则会变更失败
20. Tcaplus是主备模式吗?写请求的时候,主机写成功就给业务回包,还是要等备机同步后才回包?
是的,一主一从主备模式,主写成功回包