【深入理解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
。檔案具體內容如下:
將上述檔案內容儲存為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