全部產品
Search
文件中心

Tablestore:建立全域表

更新時間:Feb 05, 2026

本文介紹如何通過Java SDK建立Table Store的全域表。

注意事項

建立操作返回成功後,系統會以非同步方式同步資料,可通過調用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

CreateGlobalTableRequest參數說明

  • baseTable(必選)BaseTable:基礎資料表資訊,預設可寫入資料,包含以下參數。

    名稱

    類型

    說明

    regionId(必選)

    String

    地區ID,例如cn-hangzhou。

    instanceName(必選)

    String

    執行個體名稱。

    tableName(必選)

    String

    基礎資料表名稱,也是全域表名稱。

  • placements(必選)List<Placement>:表的分布位置配置列表。包含以下參數。

    名稱

    類型

    說明

    regionId(必選)

    String

    地區ID,例如cn-beijing。

    instanceName(必選)

    String

    執行個體名稱。

    writable(必選)

    boolean

    是否可寫。預設值為false。當使用主備模式時,請保持預設配置。當使用多寫入模式時,請按需配置此項為true。

  • syncMode(必選)SyncMode:資料同步模式。目前支援ROW(行級同步)。

  • serveMode(可選)ServeMode:服務模式。取值範圍:

    • PRIMARY_SECONDARY(預設值):主備模式。主地區可讀寫,備地區為唯讀。資料由主地區同步至備地區。適用於一寫多讀(本地讀)、容災備份、異地熱備的情境。

    • PEER_TO_PEER:多活模式。所有地區可同時讀寫。基於最後一次寫入優先原則LWW(Last Write Wins)按行或按列解決衝突。適用於多地區低延遲讀寫業務的情境。

樣本

建立主備模式的全域表

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或false
            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());
}