tencent cloud

文档反馈

TDR 表定义

最后更新时间:2023-12-18 10:29:13
    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>
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持