【TcaplusDB知识库】GO快速上手TDR表的增删查改操作

【TcaplusDB知识库】C++快速上手TDR表的增删查改操作

 

TDR说明

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

入门

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

Docker环境准备

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

./tcapluscli privilege --endpoint-url=http://localhost --allow-all-ip

 

TcaplusDB表准备

准备TDR表示例文件

这里以table_test.xml举例,表名: PLAYERONLINECNT, 表类型: GENERIC。文件具体内容如下:

<?xml version="1.0" encoding="GBK" standalone="yes" ?>
<metalib name="tcaplus_tb" tagsetversion="1" version="1">
<struct name="PLAYERONLINECNT" version="1" primarykey="TimeStamp,GameSvrID" splittablekey="TimeStamp">
   <entry name="TimeStamp"         type="uint32"     desc="单位为分钟" />
   <entry name="GameSvrID"         type="string"     size="64" />
   <entry name="GameAppID"         type="string"     size="64" desc="gameapp id" />
   <entry name="OnlineCntIOS"      type="uint32"     defaultvalue="0" desc="ios在线人数" />
   <entry name="OnlineCntAndroid"  type="uint32"     defaultvalue="0" desc="android在线人数" />
   <entry name="BinaryLen"         type="smalluint" defaultvalue="1" desc="数据来源数据长度;长度为0时,忽略来源检查"/>
   <entry name="binary"            type="tinyint"     desc="二进制" count= "1000" refer="BinaryLen" />
   <entry name="binary2"           type="tinyint"     desc="二进制2" count= "1000" refer="BinaryLen" />
   <entry name="strstr"            type="string"     size="64" desc="字符串"/>
   <index name="index_id"  column="TimeStamp"/>
</struct>
</metalib>

TcaplusDB集群准备

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

TcaplusDB表格组准备

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

#查看表格组帮助命令
./tcapluscli tablegroup -h
#创建一个表格组,id指定为4, endpoint-url为上面docker暴露的80端口,access-id为集群访问id (业务id, tdr集群默认为2), 用于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=table_test.xml

示例代码

以C++示例代码为例,介绍如何使用TDR接口进行TcaplusDB表数据操作,这里主要介绍Generic类型表操作。示例代码包括两种模式:同步模式 和异步模式,这里主要介绍异步模式示例代码,同步模式代码可查看SDK中examples目录相关代码。

SDK准备

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

组件名 下载地址 用途
TcaplusServiceApi3.46.0.198987.x86_64_release_20200925 Download SDK API相关代码
TSF4G_BASE-2.7.37.0a1db41b8_X86_64_Release Download tdr依赖包相关代码

TcaplusServiceApi部署方式

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

/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102

TSF4G部署方式

TSF4G_BASE-2.7.37.0a1db41b8_X86_64_Release下载后,解压后把子目录内的内容拷贝至/usr/local/tsf4g_release即可,如:

#创建目标部署目录
[root@VM-32-2-centos ~]# mkdir /usr/local/tsf4g_release
#进子目录
[root@VM-32-2-centos ~]# cd /root/TSF4G_BASE-2.7.37.0a1db41b8_X86_64_Release/release/x86_64
#拷贝至/usr/local/tsf4g_release
[root@VM-32-2-centos x86_64]# cp -rf * /usr/local/tsf4g_release

环境变量设置

主要设置两个环境变量: TSF4G_HOME和TCAPLUS_HOME, 把下面内容添加至/root/.bashrc,然后执行source /root/.bashrc使其生效,如下所示:

export TSF4G_HOME=/usr/local/tsf4g_release/
export TCAPLUS_HOME=/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64

 

编译环境准备

环境依赖 版本 说明
操作系统 CentOS7 x86体系
C++ C++98  
GCC 4.8.5  
gcc-c++ 4.8.5 yum install -y gcc-c++
tsf4g 2.7.37 tdr相关依赖,参考上述TSF4G部署方式描述

示例代码

示例代码目录在SDK目录下的examples子目录下,examples目录有很多不同类型的表示例,下面主要以C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation子目录的来举例,具体子目录如下:

#SDK根目录
/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64
#SDK公共配置目录
/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64/examples/tcaplus/C++_common_for_tdr1.0
#SDK Examples目录
/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64/examples/tcaplus/C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation

在编译具体示例代码之前,需要把本地版中关于公共参数配置的集群信息进行配置,配置目录在examples/tcaplus/C++_common_for_tdr1.0下,主要涉及如下:

#进入公共信息配置目录
cd TcaplusServiceApi3.46.0.198987.x86_64_release_20200925/release/x86_64/examples/tcaplus/C++_common_for_tdr1.0
#修改common.h,将相关集群信息改为本地版中集群相关信息
/*********************测试例子前需要用户手动修改的地方BEGIN**************************************/
// 目标业务的tcapdir地址,对于TcaplusDB本地版直接配置成0.0.0.0:9999即可
static const char DIR_URL_ARRAY[][TCAPLUS_MAX_STRING_LENGTH] =
{
"tcp://0.0.0.0:9999"
};
// 目标业务的tcapdir 地址个数, 配置成:1
static const int32_t DIR_URL_COUNT = 1;
// 目标业务的表名 PLAYERONLINECNT
static const char * TABLE_NAME = "PLAYERONLINECNT";
// 目标业务的App ID (接入ID,Access ID), TcaplusDB本地版APP_ID默认为2,用户测试可以不用修改
static const int32_t APP_ID = 2;
// 目标业务的Zone ID (游戏区ID, Table Group ID), 参考上述章节创建的group id
static const int32_t ZONE_ID = 4;
// 目标业务的业务密码,默认为39859BC573A2E254,用户测试可以不用修改, 如果有问题可访问oms控制台在业务管理->业务维护-> 查看密码
static const char * SIGNATURE = "39859BC573A2E254";
/*********************测试例子前需要用户手动修改的地方END**************************************/

在examples/tcaplus/C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation目录下每个操作子目录下的文件有几个:

文件名 文件用途
conv.sh 依据表定义文件table_test.xml生成表定义接口文件table_test.h, table_test.cpp, 借助SDK根目录下bin目录下的tdr工具来生成
envcfg.env 环境变量设置,主要设置TCAPLUS_HOME和TSF4G_HOME环境变量,设置为SDK根目录,在编译之前执行source envcfg.env,使环境变量生效
main.cpp 示例代码主程序
Makefile 编译文件
readme.txt 编译操作提示说明
table_test.xml 示例表TDR定义文件
tlogconf.xml 日志配置文件,默认不需改动

插入记录

示例代码目录:

/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64/examples/tcaplus/C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation/insert

生成表定义接口文件,如下:

#生成table_test.h, table_test.cpp
sh conv.sh
#检查Makefile,重点是LIBS和INC两个变量,参考下面设置
LIBS += -L$(TSF4G_HOME)/lib -L$(TCAPLUS_HOME)/lib -Wl,-Bstatic -ltcaplusserviceapi -ltsf4g_r -lreadline -lncurses -lscew -lexpat -Wl,-Bdynamic -lpthread -lanl
INC = -I$(TSF4G_HOME)/include -I$(TCAPLUS_HOME)/include/tcaplus_service -I../../../C++_common_for_tdr1.0
#编译
make
#执行编译好的二进制文件,插入记录,如果有问题,请联系TcaplusDB项目组相关人员协助定位问题
./mytest

查询记录

示例代码目录:

/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64/examples/tcaplus/C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation/get

编译过程:

#生成table_test.h, table_test.cpp
sh conv.sh
#检查Makefile,重点是LIBS和INC两个变量
LIBS += -L$(TSF4G_HOME)/lib -L$(TCAPLUS_HOME)/lib -Wl,-Bstatic -ltcaplusserviceapi -ltsf4g_r -lreadline -lncurses -lscew -lexpat -Wl,-Bdynamic -lpthread -lanl
INC = -I$(TSF4G_HOME)/include -I$(TCAPLUS_HOME)/include/tcaplus_service -I../../../C++_common_for_tdr1.0
#编译
make
#执行编译好的二进制文件,插入记录,如果有问题,请联系TcaplusDB项目组相关人员协助定位问题
./mytest
#编译 make #执行编译好的二进制文件,插入记录,如果有问题,请联系TcaplusDB项目组相关人员协助定位问题 ./mytest

修改记录

示例代码目录:

/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64/examples/tcaplus/C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation/update

编译过程:

#生成table_test.h, table_test.cpp
sh conv.sh
#检查Makefile,重点是LIBS和INC两个变量
LIBS += -L$(TSF4G_HOME)/lib -L$(TCAPLUS_HOME)/lib -Wl,-Bstatic -ltcaplusserviceapi -ltsf4g_r -lreadline -lncurses -lscew -lexpat -Wl,-Bdynamic -lpthread -lanl
INC = -I$(TSF4G_HOME)/include -I$(TCAPLUS_HOME)/include/tcaplus_service -I../../../C++_common_for_tdr1.0
#编译
make
#执行编译好的二进制文件,插入记录,如果有问题,请联系TcaplusDB项目组相关人员协助定位问题
./mytest

删除记录

示例代码目录:

/root/TcaplusServiceApi3.46.1.199000.x86_64_release_20201102/release/x86_64/examples/tcaplus/C++_tdr1.0_asyncmode_generic_simpletable/SingleOperation/delete

编译过程:

#生成table_test.h, table_test.cpp
sh conv.sh
#检查Makefile,重点是LIBS和INC两个变量
LIBS += -L$(TSF4G_HOME)/lib -L$(TCAPLUS_HOME)/lib -Wl,-Bstatic -ltcaplusserviceapi -ltsf4g_r -lreadline -lncurses -lscew -lexpat -Wl,-Bdynamic -lpthread -lanl
INC = -I$(TSF4G_HOME)/include -I$(TCAPLUS_HOME)/include/tcaplus_service -I../../../C++_common_for_tdr1.0
#编译
make
#执行编译好的二进制文件,插入记录,如果有问题,请联系TcaplusDB项目组相关人员协助定位问题
./mytest

【TcaplusDB知识库】GO快速上手TDR表的增删查改操作

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

上一篇:浅论Lock 与X86 Cache 一致性【转载】


下一篇:近期业务大量突增微服务性能优化总结-3.针对 x86 云环境改进异步日志等待策略