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;確認索引運行正常並觀察一段時間後,再刪除灰階索引。
在Tablestore console中查看同步進度、配置流量權重、交換索引和刪除灰階索引。具體操作請參見動態修改多元索引 Schema。
參數說明
CreateSearchIndexRequest 包含以下參數:
|
名稱 |
類型 |
說明 |
|
tableName(必選) |
|
資料表名稱。 |
|
indexName(必選) |
|
灰階索引名稱,必須以 |
|
indexSchema(必選) |
|
灰階索引的完整新 Schema。 |
|
sourceIndexName(必選) |
|
重建所基於的源索引名稱。Tablestore 根據該索引建立灰階索引,並將資料表的存量和增量資料同步到灰階索引。 |
|
timeToLive(可選) |
|
灰階索引的資料生命週期,單位為秒。可以通過 |
索引結構
indexSchema 的類型為 IndexSchema,包含以下參數。
|
名稱 |
類型 |
說明 |
|
fieldSchemas(必選) |
|
變更後的完整欄位列表。通過增加、刪除或修改列表中的欄位來調整索引欄位。 |
|
indexSetting(可選) |
|
索引設定。通過 |
|
indexSort(可選) |
|
索引預排序配置。 |
索引欄位、索引設定和預排序配置的完整參數結構及約束,請參見建立多元索引。