本文介紹如何通過Java SDK建立Table Store的全域表。
注意事項
建立操作返回成功後,系統會非同步同步資料,可通過調用DescribeGlobalTable查看全域表的目前狀態。當返回狀態為active時,表示全域表建立成功。
前提條件
在源地區和目標地區建立執行個體。
在源地區建立資料表。資料表的配置必須是資料生命週期TTL為-1(資料永不到期)、最大版本數為1、最大版本偏差無限制(即Integer.MAX_VALUE)以及開啟行版本(即updateFullRow為True)。
重要開啟行版本後存在如下限制:
單行資料最多支援 256 列。
寫入資料時不支援手動指定版本號碼,只能由系統自動產生。
執行 Update 操作時,系統需先讀取當前行版本,因此會帶來少量額外的讀取負載。
方法說明
public CreateGlobalTableResponse createGlobalTable(CreateGlobalTableRequest createGlobalTableRequest) throws TableStoreException, ClientException樣本
建立主備模式的全域表。
private static void createGlobalTableExample(SyncClient client){
// 構造請求
CreateGlobalTableRequest req = new CreateGlobalTableRequest(
// 基礎資料表配置,必須是已存在的表
new GlobalTableTypes.BaseTable(
// 基礎資料表所在地區 ID
"cn-hangzhou",
// 基礎資料表所在執行個體名稱
"i-gt-test",
// 基礎資料表的表名(同時也是全域表的表名)
"t-gt-test-1"
),
// 全域表同步模式:目前僅支援 ROW 模式(行級同步)
GlobalTableTypes.SyncMode.ROW
);
// 添加關聯表(可添加多個)
req.addPlacement(new GlobalTableTypes.Placement(
// 關聯表所在地區 ID
"cn-shanghai",
// 關聯表所在執行個體名稱,執行個體必須已存在
// 執行個體中不能存在與基礎資料表同名的表,表由系統自動建立
"i-dest-test",
// 是否可寫,false表示唯讀。主備模式下只能設定為false
false
));
// 設定服務模式為主備架構(PRIMARY_SECONDARY)
req.setServeMode(GlobalTableTypes.ServeMode.PRIMARY_SECONDARY);
// 發起請求
CreateGlobalTableResponse createResp = client.createGlobalTable(req);
// 列印響應結果
System.out.println("Global table creation initiated.");
System.out.println("RequestId: " + createResp.getRequestId());
System.out.println("GlobalTableId: " + createResp.getGlobalTableId());
}