动态修改 Schema

更新时间:
复制 MD 格式

Java SDK 可基于源多元索引创建灰度索引,在不中断读写的情况下增删索引字段,或修改字段类型、路由字段和预排序配置。

前提条件

安装Tablestore Java SDK并初始化客户端。

功能说明

调用 createSearchIndex 方法,基于源索引创建包含完整新 Schema 的灰度索引。动态修改 Schema 的过程不会中断数据表读写,使用源索引名称的查询代码也无需修改。完整流程如下:

public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
  1. 基于源索引创建灰度索引,并提交完整的新 Schema。

  2. 等待源索引的存量和增量数据同步到灰度索引,直至灰度索引的同步进度追平源索引。

  3. 按需配置源索引和灰度索引的查询流量权重,进行 A/B 测试。

  4. 确认查询结果符合预期后交换索引,使源索引名称指向新 Schema。

  5. 交换后观察一段时间,确认索引运行正常,再删除指向旧 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);

请求成功后,查询灰度索引信息,确认索引状态为 RUNNINGbrotherIndexName 为源索引名称,并核对新 Schema。RUNNING 仅表示灰度索引已创建,不表示其数据同步进度已追平源索引。

验证并切换索引

重要

控制台显示灰度索引可安全切换后,再进行 A/B 测试和索引交换。交换后,源索引名称指向新 Schema,灰度索引名称指向旧 Schema;确认索引运行正常并观察一段时间后,再删除灰度索引。

表格存储控制台中查看同步进度、配置流量权重、交换索引和删除灰度索引。具体操作请参见动态修改多元索引 Schema

参数说明

CreateSearchIndexRequest 包含以下参数:

名称

类型

说明

tableName(必选)

String

数据表名称。

indexName(必选)

String

灰度索引名称,必须以 _reindex 结尾。

indexSchema(必选)

IndexSchema

灰度索引的完整新 Schema。

sourceIndexName(必选)

String

重建所基于的源索引名称。Tablestore 根据该索引创建灰度索引,并将数据表的存量和增量数据同步到灰度索引。

timeToLive(可选)

Integer

灰度索引的数据生命周期,单位为秒。可以通过 setTimeToLiveInDays 按天设置。取值和约束请参见生命周期管理

索引结构

indexSchema 的类型为 IndexSchema,包含以下参数。

名称

类型

说明

fieldSchemas(必选)

List<FieldSchema>

变更后的完整字段列表。通过增加、删除或修改列表中的字段来调整索引字段。

indexSetting(可选)

IndexSetting

索引设置。通过 routingFields 修改路由字段。

indexSort(可选)

Sort

索引预排序配置。

索引字段、索引设置和预排序配置的完整参数结构及约束,请参见创建多元索引