建立全域表
更新時間:
Copy as MD
通過 Java SDK調用 createGlobalTable 介面,在Table Store中建立跨地區全域表,實現資料多地區複製。
使用說明
建立全域表前,先根據業務情境選擇服務模式:
主備模式(
PRIMARY_SECONDARY):主地區可讀寫,備地區唯讀。資料由主地區單向同步至備地區。適用於本地讀取、容災備份、異地熱備情境。多活模式(
PEER_TO_PEER):所有地區均可讀寫。基於最後寫入者獲勝原則(LWW)按行或列解決寫入衝突。適用於多地區低延遲讀寫情境。
建立請求成功後,系統以非同步方式同步資料。調用 DescribeGlobalTable 查看狀態,返回 active 時表示全域表建立完成。
前提條件
在源地區和目標地區分別建立執行個體。
-
在源地區建立資料表,並按以下要求配置:資料生命週期(TTL)設為
-1(永不到期)、最大版本數設為1、最大版本偏差設為無限制(Integer.MAX_VALUE)、開啟行版本(updateFullRow設為True)。重要開啟行版本後存在以下限制:
單行資料最多支援 256 列。
寫入資料時不支援手動指定版本號碼,版本號碼由系統自動產生。
執行
Update操作時,系統需先讀取當前行版本,因此會帶來少量額外讀取負載。
-
重要
使用RAM使用者的AccessKey初始化用戶端時,需確保該RAM使用者具有建立全域表的相關許可權。具體 Action 定義請參見Table Store的API類型。
方法說明
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());
}
建立多活模式的全域表
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",
// true:該地區允許寫入,多活模式下按需設定
true
));
// 設定服務模式為多活模式(PEER_TO_PEER)
req.setServeMode(GlobalTableTypes.ServeMode.PEER_TO_PEER);
// 發起請求
CreateGlobalTableResponse createResp = client.createGlobalTable(req);
// 列印響應結果
System.out.println("Global table creation initiated.");
System.out.println("RequestId: " + createResp.getRequestId());
System.out.println("GlobalTableId: " + createResp.getGlobalTableId());
}
该文章对您有帮助吗?