Java SDK 可创建主备或多活模式的全局表,在多个地域的数据表之间同步数据。
前提条件
-
安装Tablestore Java SDK并初始化客户端。创建全局表需使用 5.17.7 及以上版本。
-
源地域和目标地域均已创建 Tablestore 实例。
-
源地域中已创建基础表,且数据生命周期(TTL)为
-1、最大版本数为1、最大版本偏差为Integer.MAX_VALUE、updateFullRow为true。
功能说明
调用 createGlobalTable 方法,以已有数据表为基础创建跨地域全局表。全局表支持主备模式和多活模式。创建时,服务会在目标实例中自动创建与基础表同名的副本表,因此目标实例中不能已有同名数据表。
public CreateGlobalTableResponse createGlobalTable(CreateGlobalTableRequest createGlobalTableRequest) throws TableStoreException, ClientException
createGlobalTable 是异步接口。请求成功仅表示创建任务已发起。调用 describeGlobalTable 查询状态,当 status 为 ACTIVE 时,全局表创建完成。
开启整行更新(updateFullRow 为 true)后存在以下限制:
-
单行数据最多支持 256 列。
-
写入数据时不能手动指定版本号,版本号由服务自动生成。
-
执行
UpdateRow操作时,服务会先读取当前行,因此会增加读负载。
以下示例分别创建主备模式和多活模式的全局表。
主备模式
以下示例创建主备模式的全局表。基础表可读写,副本表只读。省略 serveMode 时使用默认值 PRIMARY_SECONDARY。
GlobalTableTypes.BaseTable baseTable = new GlobalTableTypes.BaseTable(
"cn-hangzhou", "source-instance", "example_table");
CreateGlobalTableRequest request = new CreateGlobalTableRequest(
baseTable, GlobalTableTypes.SyncMode.ROW);
request.addPlacement(new GlobalTableTypes.Placement(
"cn-beijing", "replica-instance", false));
CreateGlobalTableResponse response = client.createGlobalTable(request);
System.out.println("GlobalTableId: " + response.getGlobalTableId());
System.out.println("Status: " + response.getStatus());
多活模式
以下示例创建多活模式的全局表。将目标副本设置为可写,并将 serveMode 设置为 PEER_TO_PEER,使基础表和副本表均可接受写入。
GlobalTableTypes.BaseTable baseTable = new GlobalTableTypes.BaseTable(
"cn-hangzhou", "source-instance", "example_table");
CreateGlobalTableRequest request = new CreateGlobalTableRequest(
baseTable, GlobalTableTypes.SyncMode.ROW);
request.addPlacement(new GlobalTableTypes.Placement(
"cn-beijing", "replica-instance", true));
request.setServeMode(GlobalTableTypes.ServeMode.PEER_TO_PEER);
CreateGlobalTableResponse response = client.createGlobalTable(request);
System.out.println("GlobalTableId: " + response.getGlobalTableId());
System.out.println("Status: " + response.getStatus());
参数说明
CreateGlobalTableRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
baseTable(必选) |
BaseTable |
基础表信息。基础表是创建全局表时已存在的数据表。 |
|
placements(必选) |
|
副本位置列表。至少添加一个目标地域的副本位置。 |
|
syncMode(必选) |
SyncMode |
数据同步模式。当前仅支持 |
|
serveMode(可选) |
ServeMode |
服务模式。取值范围:
|
基础表
baseTable 的类型为 BaseTable,包含以下参数。
|
名称 |
类型 |
说明 |
|
regionId(必选) |
String |
基础表所在地域的 ID,例如 |
|
instanceName(必选) |
String |
基础表所属实例的名称。 |
|
tableName(必选) |
String |
基础表名称,也是全局表名称。 |
副本位置
placements[] 中每个元素的类型为 Placement,包含以下参数。
|
名称 |
类型 |
说明 |
|
regionId(必选) |
String |
副本所在地域的 ID,例如 |
|
instanceName(必选) |
String |
副本所属实例的名称。 |
|
writable(必选) |
boolean |
副本是否接受写操作。主备模式下设置为 |
返回值
CreateGlobalTableResponse 包含以下与创建结果直接相关的字段。
|
字段 |
类型 |
说明 |
|
globalTableId |
String |
通过 |
|
status |
GlobalTableStatus |
通过 |