1. 程式人生 > 其它 >【TcaplusDB知識庫】Java快速上手TDR表的增刪查改操作

【TcaplusDB知識庫】Java快速上手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是騰訊出品的分散式NoSQL資料庫,儲存和排程的程式碼完全自研。具備快取+落地融合架構、PB級儲存、毫秒級時延、無損水平擴充套件和複雜資料結構等特性。同時具備豐富的生態、便捷的遷移、極低的運維成本和五個九高可用等特點。客戶覆蓋遊戲、網際網路、政務、金融、製造和物聯網等領域。