1. 程式人生 > 其它 >【深入理解TcaplusDB技術】GO實現TDR表的增刪查改操作

【深入理解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_3.40.0.657f5f8.x86_64_release_20201102 Download Go SDK API相關

TcaplusGoApi部署方式

TcaplusGoApi_3.40.0.657f5f8.x86_64_release_20201102下載後,直接解壓至目標機器相應目錄即可,如:

/root/TcaplusGoApi_3.40.0.657f5f8.x86_64_release_20201102

 

編譯環境準備

環境依賴 版本 說明
作業系統 CentOS7 x86體系
Golang 1.14以上 x86體系

 

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級儲存、毫秒級時延、無損水平擴充套件和複雜資料結構等特性。同時具備豐富的生態、便捷的遷移、極低的運維成本和五個九高可用等特點。客戶覆蓋遊戲、網際網路、政務、金融、製造和物聯網等領域。