【深入理解TcaplusDB技術】Java實現TDR表的增刪查改操作
說明
TDR表是基於TDR協議設計的TcaplusDB表,TDR協議是騰訊自研的RPC通訊協議,用於TcaplusDB儲存資料的序列化、反序列化等操作,相比於PB表(Protocol協議表)在傳輸效率及傳輸質量上有一定優勢,在騰訊遊戲內部有廣泛應用基礎,具體關於TDR表的定義說明可參考章節:表定義語言(PB,TDR)。TDR表定義以xml格式來定義表結構,支援豐富的資料型別,請參考章節:資料型別(PB, TDR)。
快速入手TDR協議表的開發涉及幾個步驟,下面介紹如何基於TcalusDB本地Docker版環境,快速上手基於Java進行TDR表的增刪查改操作。所有操作均在申請的開發測試機或雲主機進行。
基礎環境準備
Docker環境準備
在開始示例程式碼演示之前,需要提前準備好TcaplusDB本地Docker環境及tcapluscli工具,具體請參考資料:[Linux] TcaplusDB Local版部署。
Java環境準備
Java SDK示例依賴JDK環境部署,JDK版本:openjdk-1.7以上。在不同環境安裝方式如下:
#CentOS7環境安裝,安裝jdk1.8版本
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
#Debian8.2環境安裝,安裝1.7版本
apt-get install openjdk-7-jre openjdk-7-jdk
TcaplusDB環境準備
TcaplusDB表準備
準備TDR表示例檔案
表名: test, 表型別: GENERIC
,表定義具體內容儲存在test.xml。檔案具體內容如下:
TcaplusDB叢集準備
對於TcaplusDB,在建立表之前需要建立對應的表叢集。對於Docker本地版,叢集已經預設建立好一個供大家使用,所以不用再建立叢集。
TcaplusDB表格組準備
表建立依賴於表格組,需要在預設叢集下建立一個表格組。建立表格組依賴tcapluscli工具,關於tcapluscli的使用,具體可參考:表格組相關操作命令。
#查看錶格組幫助命令
./tcapluscli tablegroup -h
#建立一個表格組,id指定為4, endpoint-url,用於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: 2 (TDR叢集), 表格組id: group-id, 表型別: TDR, 表定義檔案: table_test.xml,放當前路徑
./tcapluscli table create --endpoint-url=http://localhost --access-id=2 --group-id=4 --schema-type=TDR --schema-file=test.xml
#查看錶是否建立成功
./tcapluscli table describe --endpoint-url=http://localhost --access-id=2 --group-id=4 --list
示例程式碼
獲取公共環境資訊
引數 | 值 | 獲取方法 |
---|---|---|
目錄服務地址列表 | *.*.*.*:9999 | 獲取目錄服務地址列表 |
業務ID/叢集ID | 8 | 獲取叢集ID |
業務密碼 | **************** | 獲取業務密碼 |
表格組ID | 4 | 獲取表格組ID |
表格名稱 | test |
獲取依賴包
包名 | 下載地址 | 用途 |
---|---|---|
tcaplus-service-api-3.32.0 | 下載 | Java SDK包 |
org.slf4j:slf4j-api:1.7.5 | 下載 | Java SDK依賴的第三方包,用於輸出日誌 。 |
如果使用Maven作為Java專案管理工具,則可以將獲取的jar包,匯入到Maven倉庫中,再通過配置pom.xml,引入到專案中即可。
示例程式碼
將下述示例程式碼儲存至Example.java
示例程式碼
import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] arguments) {
// 1. 準備環境資訊
// 1.1. 目錄服務地址列表,對於Docker本地版:dir地址為docker部署的機器內網ip地址,埠預設為9999;對於線上雲環境,為叢集連線內網地址,埠預設為9999
List<String> dirList = new ArrayList<String>();
dirList.add("tcp://localhost:9999");
// 1.2. 業務ID,接入ID,對於Docker本地版: TDR表預設為2,PB表預設為3; 對於線上雲環境,根據實際建立的叢集接入ID填寫
int appId = 2;
// 1.3. 業務密碼,對於Docker本地版:可以通過開啟oms本地環境檢視對應TDR業務的叢集密碼,業務管理->業務維護->選擇TDR業務,檢視叢集密碼; 對於線上雲環境,根據自行設定的密碼填寫
String appPassword = "****************";
// 1.4. 表格組ID,替換為自己建立的表格組id
int tableGroupId = 4;
// 1.5. 表格名稱, 替換為自己建立的表名
String tableName = "test";
// 2. 建立客戶端
Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
try {
// 插入資料
insert(client, tableName);
// 獲取資料
select(client, tableName);
// 修改資料
update(client, tableName);
// 刪除資料
delete(client, tableName);
} finally {
// 3. 銷燬客戶端物件
ClientFactory.destroyClient(client);
}
}
private static void insert(Client client, String tableName) {
// 1. 構造插入資料的請求
// 1.1. 獲取請求物件。為了提升SDK效能,Request物件是複用的
Request request = client.acquireRequest();
// 1.2. 設定請求型別和目標表名
request.setCmd(TcaplusProtocolCsConstants.TCAPLUS_CMD_INSERT_REQ);
request.setTableName(tableName);
// 1.3. 設定資料各欄位的值,這裡要注意Key欄位和Value欄位,使用的是不同的方法設定欄位值
Record record = request.addRecord();
record.setKeyInt("gameid", 1);
record.setKeyInt("itemid", 1);
record.setKeyString("name", "test");
record.setValueByte("typeid", (byte) 1);
record.setValueByte("data", (byte) 1);
record.setValueString("uname", "test");
// 2. 傳送請求,並獲取結果
Response response = client.