写点什么

【深入理解 TcaplusDB 技术】GO 实现 TDR 表的增删查改操作

作者:tcaplus
  • 2022 年 5 月 18 日
  • 本文字数:2918 字

    阅读完需:约 10 分钟

【深入理解TcaplusDB技术】GO实现TDR表的增删查改操作

【深入理解 TcaplusDB 技术】GO 实现 TDR 表的增删查改操作

TDR 说明

TDR 表是基于 TDR 协议设计的 TcaplusDB 表,TDR 协议是腾讯自研的 RPC 通信协议,用于 TcaplusDB 存储数据的序列化、反序列化等操作,相比于 PB 表(Protocol 协议表)在传输效率及传输质量上有一定优势,在腾讯游戏内部有广泛应用基础,具体关于 TDR 表的定义说明可参考章节:表定义语言(PB,TDR)。TDR 表定义以 xml 格式来定义表结构,支持丰富的数据类型,请参考章节:数据类型(PB, TDR)。

入门

快速入手 TDR 协议表的开发涉及几个步骤,下面介绍如何基于 TcalusDB 本地 Docker 版环境,快速上手基于 Golang 进行 TDR 表的增删查改操作。所有操作均在申请的开发测试机或云主机进行。

Docker 环境准备

在开始示例代码演示之前,需要提前准备好 TcaplusDB 本地 Docker 环境及 tcapluscli 工具,具体请参考资料:[Linux] TcaplusDB Local版部署。Docker 部署好后,对于命令行工具需要授权所有 IP 访问 Docker 环境,授权方式:


./tcapluscli privilege --endpoint-url=http://localhost --allow-all-ip
复制代码

Go 环境准备

GO SDK 示例依赖 GO 环境的部署,对于 Centos 系统可以直接安装通过:


yum install golang
复制代码

TcaplusDB 表准备

准备 TDR 表示例文件

这里以示例中的 service_info.xml 举例,表名: service_info, 表类型: GENERIC。文件具体内容如下:


<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><metalib name="service_info" tagsetversion="1" version="1">  <struct name="service_info" version="1" primarykey="gameid,envdata,name,expansion" splittablekey="gameid" >    <entry name="gameid"            type="string"     size="128" desc="gameapp id"/>    <entry name="envdata"           type="string"     size="1024" desc="env环境信息" />    <entry name="name"              type="string"     size="1024" desc="名字" />    <entry name="expansion"       type="string"     size="1024" desc="扩展字段" />    <entry name="filterdata"        type="string"     size="1024" desc="过滤标签" />    <entry name="updatetime"        type="uint64"     desc="最近更新时间,单位ms" />    <entry name="inst_max_num"      type="uint64"     desc="最大实例个数" />    <entry name="inst_min_num"      type="uint64"     desc="最小实例个数" />    <entry name="routeinfo_len"     type="uint"   defaultvalue="0" desc="路由规则信息长度" />    <entry name="routeinfo"         type="char"   count="1024" refer="routeinfo_len" desc="路由规则信息" />    <index name="index_gameid_envdata_name" column="gameid,envdata,name" />    <index name="index_gameid_envdata" column="gameid,envdata" />    <index name="index_gameid_name" column="gameid,name" />    <index name="index_gameid" column="gameid" />  </struct></metalib>
复制代码


将上述文件内容保存为service_info.xml

TcaplusDB 集群准备

对于 TcaplusDB,在创建表之前需要创建对应的表集群。对于 Docker 本地版,集群已经默认创建好一个供大家使用,所以不用再创建集群。

TcaplusDB 表格组准备

TcaplusDB 表在集群的基础上还依赖于表格组,相当于游戏里的逻辑分区,使用工具创建表格组命令如下:


#查看表格组帮助命令./tcapluscli tablegroup -h#创建一个表格组,id指定为4, endpoint-url为上面docker暴露的80端口,access-id为集群接入ID(业务ID,2表示TDR集群), 用于docker环境连接使用, group name由字母、数字和下划线组成./tcapluscli tablegroup create --endpoint-url=http://localhost --access-id=2 --group-id=4 --group-name=zone_4
复制代码

TcaplusDB 表创建

现在正式进入表创建环节,在上述表格组基础上创建一个 TDR 表,执行创建表命令,如下所示:


#查看表创建命令提示帮助./tcapluscli table -h#创建一个表, 指定endpoint-url, 表格组id: group-id, 表类型: TDR, 表定义文件: table_test.xml,放当前路径./tcapluscli table create  create --endpoint-url=http://localhost --access-id=2 --group-id=4 --schema-type=TDR --schema-file=service_info.xml
复制代码

示例代码

以 Golang 示例代码为例,介绍如何使用 TDR 接口进行 TcaplusDB 表数据操作,这里主要介绍 Generic 类型表操作。GO 示例代码以 Go Mod 方式进行组织管理,所以用户的 Go 环境必须大于1.11,建议1.14以上,比较稳定。

SDK 准备

这里以 3.40.0 版本为示例演示,需要下载两个组件:


TcaplusGoApi 部署方式

TcaplusGoApi_3.40.0.657f5f8.x86_64_release_20201102 下载后,直接解压至目标机器相应目录即可,如:


/root/TcaplusGoApi_3.40.0.657f5f8.x86_64_release_20201102
复制代码

编译环境准备

SDK 目录结构说明

Tcaplus API 的依赖库及其源码都在打包后的 src/vendor 目录下,用户只需将 vendor 放入自己的工程目录即可使用 Tcaplus Go API 的接口 vendor 依赖介绍:


  • github.com/tencentyun/tcaplusdb-go-sdk/tdr 是 Tcaplus Go API 源码

  • github.com/tencentyun/tsf4g/TdrCodeGen 是 tdr 工具,可将 tdr 的 xml 转换为 go 源码

  • github.com/tencentyun/tsf4g/tdrcom 是 tdr go 源码打解包的依赖库

  • go.uber.org/zap 是日志库

  • github.com/natefinch/lumberjack 是日志文件切割库

示例代码编译

示例代码编译前需要准备两个步骤,一个是表定义结构文件的生成,一个是 Docker 公共连接参数配置。

TDR 表定义文件生成

表定义文件主要用于表 TDR 接口使用,需要提前生成,可通过 TDR 工具生成,具体如下所示:


cd vendor/github.com/tencentyun/tsf4g/TdrCodeGen/python tdr.py table.xml得到相应表的go源码目录table/table.go将table放到自己的go的工程目录即可使用
复制代码

公共连接参数配置

公共参数配置在示例代码中的main.go,如下所示:


#找到main.go中如下const定义部分const (        AppId     = uint64(2)       //集群接入ID, 默认为2,用户测试无需修改        ZoneId    = uint32(4)       //集群表格组ID, 根据上述表格组创建时指定的ID, 如:4        DirUrl    = "tcp://0.0.0.0:9999"   //集群访问地址,本地docker版默认为:0.0.0.0, 端口默认:9999, 如果跨机访问docker,IP可设为对应docker机器绑定的地址        Signature = "39859BC573A2E254" //集群访问密码,默认为39859BC573A2E254, 如果不一致,可以在oms业务维护界面查看对应业务id的密码        TableName = "service_info"             //表名)
复制代码

编译代码

在示例代码目录,已经集成了Makefile, 方便用户用 make 方式进行编译。Makefile 文件中把 GO 执行的一系列命令放在里面,用户无需再单独执行


#进示例代码目录cd /root/TcaplusGoApi_3.40.0.657f5f8.x86_64_release_20201102/src/example/generic_table#直接执行makemake#生成generic_table可执行文件,直接执行即可进行相关操作./generic_table
复制代码





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

用户头像

tcaplus

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
【深入理解TcaplusDB技术】GO实现TDR表的增删查改操作_数据库_tcaplus_InfoQ写作社区