ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[TcaplusDB知识库]TcaplusDB表定义

2021-07-26 20:32:05  阅读:159  来源: 互联网

标签:index 知识库 string TcaplusDB player tcaplusservice 主键 定义


作者:TcaplusDB
链接:https://zhuanlan.zhihu.com/p/374233048
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

数据库以表为载体存储数据,不同的表往往表示不同的实体。作为国产自研键值型nosql数据库,TcaplusDB支持2种类型的表:protobuf(Protocol Buffers)表和TDR(Tencent Data Representation)表。

Protobuf是Google开发的一种描述性语言,对结构化数据进行序列化,同时强调简单性和性能; TDR是由腾讯开发的跨平台数据表示语言,结合了XML,二进制和ORM(对象关系映射)的优势,在腾讯游戏数据的序列化场景中广泛使用。本文将简单介绍如何定义这两种表。

Protobuf表

以下是protobuf表game_players.proto的示例,您可以将文件上传到腾讯云控制台并创建该表。

syntax = "proto3";         // 指定protobuf语言版本,proto3.

// 导入TcaplusDB公共定义服务  
import "tcaplusservice.optionv1.proto"; 

message game_players {  // 定义TcaplusDB表,包含message类型

// 基于选择项tcaplusservice.tcaplus_primary_key创建主键字段
// TcaplusDB单个表最多能指定4个主键字段
    option(tcaplusservice.tcaplus_primary_key) = "player_id, player_name, player_email";

    // 基于选择项tcaplusservice.tcaplus_index创建主键索引
    option(tcaplusservice.tcaplus_index) = "index_1(player_id, player_name)";
    option(tcaplusservice.tcaplus_index) = "index_2(player_id, player_email)";

    // TcaplusDB支持的数值类型:
    // int32, int64, uint32, uint64, sint32, sint64, bool, fixed64, sfixed64, double, fixed32, sfixed32, float, string, bytes
    // 嵌套类型: message

    // 主键字段
    int64 player_id = 1;  
    string player_name = 2;
    string player_email = 3;
	
    // 普通(非主键) 字段
    int32 game_server_id = 4;
    repeated string login_timestamp = 5;
    repeated string logout_timestamp = 6;
    bool is_online = 7;
	
    payment pay = 8; 
}

message payment { 
    
int64 pay_id = 1;
uint64 amount = 2;
int64 method = 3;

}

TDR表

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

推荐在一个XML文件中创建两种不同类型的表。

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

TcaplusDB是腾讯出品的分布式NoSQL数据库,存储和调度的代码完全自研。具备缓存+落地融合架构、PB级存储、毫秒级时延、无损水平扩展和复杂数据结构等特性。同时具备丰富的生态、便捷的迁移、极低的运维成本和五个九高可用等特点。客户覆盖游戏、互联网、政务、金融、制造和物联网等领域。

 

标签:index,知识库,string,TcaplusDB,player,tcaplusservice,主键,定义
来源: https://www.cnblogs.com/shujurener/p/15063203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有