tencent cloud

游戏数据库 TcaplusDB

产品动态
产品简介
产品概述
产品优势
应用场景
产品架构
地域介绍
购买指南
产品定价
欠费说明
快速入门
了解基本概念
创建集群
创建表格组
创建表格
获取连接信息
访问 TcaplusDB
操作指南
管理集群与表格组
管理表格
监控与告警
访问管理
标签
任务列表
使用 TcaplusDB client
使用 client 工具访问数据
client 工具命令参考
使用 TcaplusDB SDK
变更历史
SDK 下载
SDK for C++ 接口说明
TcaplusDB 错误码
SDK 安装
PB 表 C++SDK 操作方法
TDR 表 C++SDK 操作方法
使用 TcaplusDB RESTful API
RESTful API 接口说明
Go RESTful API 接口说明
Java RESTful API 接口说明
PHP RESTful API 接口说明
Python RESTful API 接口说明
RESTful API 各语言示例下载
实践教程
表结构设计
数据库交互
常见问题
信息咨询类
数据库使用类
数据库原理类
API 文档
History
Introduction
API Category
Making API Requests
Table Group APIs
Other APIs
Table APIs
Cluster APIs
Data Types
Error Codes
相关协议
服务等级协议
服务条款
词汇表
联系我们

TDR 表定义

PDF
聚焦模式
字号
最后更新时间: 2024-12-04 09:56:31
TcaplusDB 支持2种表定义格式,protobuf(Protocol Buffers)表 TDR(Tencent Data Representation)表。 Protobuf 是 Google 开发的一种描述性语言,针对结构化数据进行序列化,同时强调数据结构的简单化和性能。 TDR 是由腾讯开发的跨平台数据表示语言,结合了 XML,二进制和 ORM(对象关系映射)的优势,在腾讯游戏数据的序列化场景中广泛使用。 两者在使用上没有根本性的变化,请根据具体业务使用习惯选择表定义语言。 本文主要描述 Protobuf 表定义语言的定义形式。

TDR 表

TDR 支持通用(generic)表和列表(list)表。 generic 表是以表的形式表示元素属性的表,例如学生,雇主,游戏玩家。 list表是一系列记录,例如游戏排行榜,游戏中的邮件(通常是最近的100封邮件)。
可以在一个 XML 文件中创建不同类型的表。

表定义信息

元素 metalib 是 xml 文件的根元素。
属性 tagsetversion 应该始终为1。
包含属性 primarykey 的 struct 元素定义一个表;否则,它只是一个普通的结构体。
每次修改表结构时,版本属性值需要相应地加1,初始版本始终为1。
primarykey 属性指定主键字段;对于 generic 表,您最多可以指定4个主键字段,对于 list 表,则可以指定3个。
splittablekey 属性等效于分片键(shard key),TcaplusDB 表被拆分存储到多个存储节点。 splittablekey 必须是主键字段之一,一个好的 splittablekey 应该具有高度分散性,这意味着值的范围很广,建议选用字符串类型。
desc 属性包含当前元素的描述。
entry 元素定义一个字段。支持的值类型包括 int32,string,char,int64,double,shor t等。
index 元素定义一个索引,该索引必须包含 splittablekey。由于可以使用主键查询表,因此索引不应与主键属性相同。

TDR 表描述文件示例

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

<metalib name="tcaplus_tb" tagsetversion="1" version="1">

<!-- generic_table `users`, store the user' information -->
<!-- an user may has many roles -->
<struct name="users" version="1" primarykey="user_id,username,role_id" splittablekey="user_id" desc="user table">
<entry name="user_id" type="uint64" desc="user id"/>
<entry name="username" type="string" size="64" desc="login username"/>
<entry name="role_id" type="int32" desc="a user can have multiple roles"/>

<entry name="level" type="int32" defaultvalue="1" desc="role's level"/>
<entry name="role_name" type="string" size="1024" desc="role's name"/>
<entry name="last_login_time" type="string" size="64" defaultvalue="" desc="user login timestamp"/>
<entry name="last_logout_time" type="string" size="64" defaultvalue="" desc="user logout timestamp"/>

<index name="index1" column="user_id"/>
</struct>

<!-- list_table `mails`, store the role's mails -->
<struct name="mails" version="1" primarykey="user_id,role_id" desc="mail table">
<entry name="user_id" type="uint64" desc="user id"/>
<entry name="role_id" type="int32" desc="a user may has many roles"/>

<entry name="text" type="string" size="2048" desc="mail text"/>
<entry name="send_time" type="string" size="64" defaultvalue="" desc="timestamp of the mail sent"/>
<entry name="read_time" type="string" size="64" defaultvalue="" desc="timestamp of the mall read"/>
</struct>

</metalib>
另外,您可以使用 union 创建嵌套类型。
union 元素包含原始类型的集合,例如整数和字符串,可以将 Union 也可以作为自定义类型来引用。 Macro 标签用于定义常量。
<macro name="DB_MAX_USER_MSG_LEN" value="301" desc="Max length of the message that user can define"/>
<union name="DBPlayerMsg" version="1" desc="DB Player message">
<entry name="SysMsgID" type="uint8" desc="Message ID" />
<entry name="UsrMsg" type="string" size="DB_MAX_USER_MSG_LEN" desc="player created message" />
</union>


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈