创建全局表

本文介绍如何通过Java SDK创建表格存储的全局表。

注意事项

创建操作返回成功后,系统会异步同步数据,可通过调用DescribeGlobalTable查看全局表的当前状态。当返回状态为active时,表示全局表创建成功。

前提条件

  • 在源地域和目标地域创建实例。

  • 在源地域创建数据表。数据表的配置必须是数据生命周期TTL为-1(数据永不过期)、最大版本数为1、最大版本偏差无限制(即Integer.MAX_VALUE)以及开启行版本(即updateFullRowTrue)。

    重要

    开启行版本后存在如下限制:

    • 单行数据最多支持 256 列。

    • 写入数据时不支持手动指定版本号,只能由系统自动生成。

    • 执行 Update 操作时,系统需先读取当前行版本,因此会带来少量额外的读取负载。

  • 初始化客户端

方法说明

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。当使用主备模式时,请保持默认配置。

  • syncMode(必选)SyncMode:数据同步模式。目前支持ROW(行级同步)。

  • serveMode(可选)ServeMode:服务模式。目前只支持PRIMARY_SECONDARY(主备模式)。

示例

创建主备模式的全局表。

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