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

【深入理解TcaplusDB技術】GO實現PB表的增刪查改操作

【深入理解TcaplusDB技術】GO實現PB表的增刪查改操作

 

Protobuf說明

PROTO表是基於PROTOBUF協議設計的TcaplusDB表,PROTOBUF協議是Google開源的通用RPC通訊協議,用於TcaplusDB儲存資料的序列化、反序列化等操作,具體關於PROTO表的定義說明可參考章節:表定義語言(PB,TDR)。PROTO表定義以protobuf格式來定義表結構,支援豐富的資料型別,請參考章節:資料型別(PB, TDR)

入門

快速入手PROTOBUF協議表的開發涉及幾個步驟,下面介紹如何基於TcalusDB本地Docker版環境,快速上手基於Golang進行PROTO表的增刪查改操作。所有操作均在申請的開發測試機或雲主機進行。

Docker環境準備

在開始示例程式碼演示之前,需要提前準備好TcaplusDB本地Docker環境及tcapluscli工具,具體請參考資料:TcaplusDB入門-Docker部署篇.md。 Docker部署好後,對於命令列工具需要授權所有IP訪問Docker環境,授權方式:

#access-id指定業務id, 2: tdr業務,3: pb業務,這裡是pb業務所以預設為3
./tcapluscli privilege --endpoint-url=http://localhost --access-id=3--allow-all-ip

Go環境準備

GO SDK示例依賴GO環境的部署,對於Centos系統可以直接安裝通過:

yum install golang

建議版本:1.13以上。

protoc工具準備

對於protobuf定義檔案,需要藉助protoc工具來生成介面程式碼,如果要生成Go的介面程式碼,還需要藉助protoc-gen-go外掛來輔助。這裡需要準備下載對應OS平臺的這兩個工具:

工具名 下載
protoc Download
protoc-gen-go Download

備註:

  • protoc下載後,直接拷貝到/usr/bin目錄

  • protoc-gen-go下載後,進入相應目錄,直接go build -o protoc-gen-go main.go,可得到二進位制檔案,把其拷貝到/usr/bin系統目錄

TcaplusDB表準備

準備PROTO表示例檔案

這裡以示例中的game_players.proto舉例,表名: game_players, 表型別: GENERIC。檔案具體內容如下:

syntax = "proto3";                      // Specify the version of the protocol buffers language
import "tcaplusservice.optionv1.proto"; // Use the public definitions of TcaplusDB by importing them.
message game_players {  // Define a TcaplusDB table with message
   // Specify the primary keys with the option tcaplusservice.tcaplus_primary_key
   // The primary key of a TcaplusDB table has a limit of 4 fields
   option(tcaplusservice.tcaplus_primary_key) = "player_id, player_name, player_email";
   // Specify the primary key indexes with the option tcaplusservice.tcaplus_index
   option(tcaplusservice.tcaplus_index) = "index_1(player_id, player_name)";
   option(tcaplusservice.tcaplus_index) = "index_2(player_id, player_email)";
   // Value Types supported by TcaplusDB
   // int32, int64, uint32, uint64, sint32, sint64, bool, fixed64, sfixed64, double, fixed32, sfixed32, float, string, bytes
   // Nested Types Message
   // primary key fields
   int64 player_id = 1;
   string player_name = 2;
   string player_email = 3;
   // Ordinary fields
   int32 game_server_id = 4;
   repeated string login_timestamp = 5;
   repeated string logout_timestamp = 6;
   bool is_online = 7;
   payment pay = 8;
}
message payment {
   int64 pay_id = 1;
   uint64 amount = 2;
   int64 method = 3;
}

將上述檔案內容儲存為game_players.proto

TcaplusDB叢集準備

對於TcaplusDB,在建立表之前需要建立對應的表叢集。對於Docker本地版,叢集已經預設建立好一個供大家使用,所以不用再建立叢集。對於PROTO叢集,已經預設建立一個pb_app的業務,叢集接入ID (AccessID) 預設為3。叢集密碼(AccessPassword)檢視可開啟TcaplusDB運維平臺,開啟方式:直接瀏覽器輸入部署docker的機器ip即可,預設埠80。預設登入方式:

使用者名稱: tcaplus密碼: tcaplus

登入後,進入業務管理->業務維護->選擇業務名稱,這裡預設選pb_app業務,在對應行的右側點選檢視密碼即可。

 

TcaplusDB表格組準備

TcaplusDB表在叢集的基礎上還依賴於表格組,相當於遊戲裡的邏輯分割槽,使用工具建立表格組命令如下:

#查看錶格組幫助命令
./tcapluscli tablegroup -h
#建立一個表格組,id指定為2, endpoint-url為上面docker暴露的80埠,access-id為叢集接入ID(業務ID,3表示PROTO叢集), 用於docker環境連線使用, group name由字母、數字和下劃線組成
./tcapluscli tablegroup create --endpoint-url=http://localhost --access-id=3 --group-id=2 --group-name=zone_2

TcaplusDB表建立

現在正式進入表建立環節,在上述表格組基礎上建立一個PROTO表,執行建立表命令,如下所示:

#查看錶建立命令提示幫助
./tcapluscli table -h
#建立一個表, 指定endpoint-url, 表格組id: group-id, 表型別: PROTO, 表定義檔案: game_players.proto, 放當前路徑
./tcapluscli table create create --endpoint-url=http://localhost --access-id=3 --group-id=2 --schema-type=PROTO --schema-file=game_players.proto

示例程式碼

以Golang示例程式碼為例,介紹如何使用PROTOBUF介面進行TcaplusDB表資料操作,這裡主要介紹Generic型別表操作。GO示例程式碼以go mod方式進行編譯,GO版本以1.15舉例.

 

示例程式碼下載

目前示例程式碼放在github路徑,直接下載即可。

git clone https://github.com/tencentyun/tcaplusdb-go-examples.git

示例程式碼目錄結構:

[root@VM-48-13-centos tcaplusdb-go-examples]# tree
.
|-- pb
|   |-- example.go
|   |-- go.mod
|   |-- go.sum
|   |-- logconf.xml
|   |-- Makefile
|   |-- table
|   |   |-- game_players.proto
|   |   |-- tcaplusservice
|   |   |   |-- game_players.pb.go
|   |   |   `-- tcaplusservice.optionv1.pb.go
|   |   `-- tcaplusservice.optionv1.proto
|   `-- test.go
`-- README.md

示例程式碼說明:

檔案 檔案說明
example.go 示例程式碼主檔案,包含CRUD介面
test.go 示例壓測檔案,壓測讀寫介面,開協程併發壓測
logconf.xml 日誌配置檔案,預設級別ERROR, 如果需要更詳細的,可開DEBUG, 如果壓測的話用ERROR既可,避免效能損耗
Makefile 編譯檔案,直接執行make可編譯得到示例二進位制檔案
table 表介面定義目錄,包含表相關定義檔案,及生成的表介面定義程式碼檔案
game_players.proto 示例表定義檔案
tcaplusservice.optionv1.proto tcaplusdb pb協議定義檔案
tcaplusservice 用protoc生成的表定義介面程式碼目錄
game_players.pb.go 生成的表定義介面程式碼
tcaplusservice.optionv1.pb.go 生成的pb協議介面程式碼

表介面程式碼生成

如果不想用示例程式碼中的示例表,參照game_players.proto定義好後,可以用如下命令生成:

cd table
mkdir tcaplusservice
#生成pb協議介面程式碼
protoc --go_out=./tcaplusservice tcaplusservice.optionv1.proto
#生成表定義介面程式碼
protoc --go_out=./tcaplusservice mytable.proto

備註:

  • 需要同時安裝protoc-gen-go外掛才行

  • 需要在proto檔案中指定package, 如預設的package tcaplusservice

 

公共連線環境配置

下載示例程式碼後,找到example.go檔案,並修改如下引數,改成業務方申請的tcaplusdb連線資訊或本地部署的tcaplusdb資訊;

  //叢集訪問地址,本地docker版:配置docker部署機器IP, 埠預設:9999, 騰訊雲線上環境配置為連線地址IP和埠
        DirUrl = "tcp://x.x.x.x:xxxx"
        //叢集接入ID, 預設為3,本地docker版:直接填3,雲上版本:根據實際叢集接入ID填寫
        AppId = 3
        //叢集訪問密碼,本地docker版:參考叢集準備階段獲取叢集密碼步驟,需要藉助tcaplusdb web運維平臺檢視; 雲上版本:根據實際申請叢集詳情頁檢視
        Signature = "xxxxx"
        //表格組ID,替換為自己建立的表格組ID
        ZoneId = 2
        //表名稱
        TableName = "game_players"

 

編譯程式碼

在示例程式碼目錄,已經集成了Makefile, 方便使用者用make方式進行編譯。Makefile檔案中把GO執行的一系列命令放在裡面,使用者無需再單獨執行

#進示例程式碼目錄
cd  tcaplusdb-go-examples/pb
#直接執行make
make
#生成example, test可執行檔案,直接執行即可進行相關操作
#體驗CRUD介面
./example
#體驗讀寫壓測
./test -t 10 -n 10

 


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