Java SDK 可基于源多元索引创建灰度索引,在不中断读写的情况下增删索引字段,或修改字段类型、路由字段和预排序配置。
前提条件
安装Tablestore Java SDK并初始化客户端。
功能说明
调用 createSearchIndex 方法,基于源索引创建包含完整新 Schema 的灰度索引。动态修改 Schema 的过程不会中断数据表读写,使用源索引名称的查询代码也无需修改。完整流程如下:
public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
基于源索引创建灰度索引,并提交完整的新 Schema。
等待源索引的存量和增量数据同步到灰度索引,直至灰度索引的同步进度追平源索引。
按需配置源索引和灰度索引的查询流量权重,进行 A/B 测试。
确认查询结果符合预期后交换索引,使源索引名称指向新 Schema。
交换后观察一段时间,确认索引运行正常,再删除指向旧 Schema 的灰度索引。
灰度索引是动态修改 Schema 流程使用的临时索引,名称必须以
_reindex结尾。流程中索引指向和流量权重会发生变化,请勿直接使用灰度索引名称查询数据。同一时间最多重建 5 个索引。开始下一批前,请等待当前批次的灰度索引追平源索引,或完成索引切换。
创建灰度索引
以下示例将 col1 从 Long 改为 Keyword,删除 col2,新增 Long 字段 col3,并将 id 设置为路由字段。
String tableName = "example_table";
String sourceIndexName = "example_index";
String reindexName = "example_index_reindex";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("id", FieldType.KEYWORD),
new FieldSchema("col1", FieldType.KEYWORD),
new FieldSchema("col3", FieldType.LONG)));
IndexSetting indexSetting = new IndexSetting();
indexSetting.setRoutingFields(Arrays.asList("id"));
indexSchema.setIndexSetting(indexSetting);
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(reindexName);
request.setSourceIndexName(sourceIndexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
请求成功后,查询灰度索引信息,确认索引状态为 RUNNING、brotherIndexName 为源索引名称,并核对新 Schema。RUNNING 仅表示灰度索引已创建,不表示其数据同步进度已追平源索引。
验证并切换索引
控制台显示灰度索引可安全切换后,再进行 A/B 测试和索引交换。交换后,源索引名称指向新 Schema,灰度索引名称指向旧 Schema;确认索引运行正常并观察一段时间后,再删除灰度索引。
在表格存储控制台中查看同步进度、配置流量权重、交换索引和删除灰度索引。具体操作请参见动态修改多元索引 Schema。
参数说明
CreateSearchIndexRequest 包含以下参数:
|
名称 |
类型 |
说明 |
|
tableName(必选) |
|
数据表名称。 |
|
indexName(必选) |
|
灰度索引名称,必须以 |
|
indexSchema(必选) |
|
灰度索引的完整新 Schema。 |
|
sourceIndexName(必选) |
|
重建所基于的源索引名称。Tablestore 根据该索引创建灰度索引,并将数据表的存量和增量数据同步到灰度索引。 |
|
timeToLive(可选) |
|
灰度索引的数据生命周期,单位为秒。可以通过 |
索引结构
indexSchema 的类型为 IndexSchema,包含以下参数。
|
名称 |
类型 |
说明 |
|
fieldSchemas(必选) |
|
变更后的完整字段列表。通过增加、删除或修改列表中的字段来调整索引字段。 |
|
indexSetting(可选) |
|
索引设置。通过 |
|
indexSort(可选) |
|
索引预排序配置。 |
索引字段、索引设置和预排序配置的完整参数结构及约束,请参见创建多元索引。