如果由于业务变更、性能优化等情况需要在多元索引中新增、更新或者删除索引列以及修改多元索引的路由键和预排序方式,您可以通过动态修改多元索引的schema实现。动态修改schema操作包括为源索引创建灰度索引并修改多元索引schema、等待表数据全部同步到灰度索引、设置权重进行A/B测试、交换源索引和灰度索引的schema和删除灰度索引五个步骤。
功能概述
表格存储数据表是schema free的,而多元索引是强schema的。创建多元索引时,您需要指定添加到多元索引中的列,这样使用多元索引查询数据时才能查询到这些列。但是出于业务变更、性能优化等目的,修改多元索引schema成为一个非常常见的需求。例如以下场景:
新增索引列:随着业务发展,需要查询更多的列,则可以添加更多的索引列。
更新索引列:可以修改列类型、虚拟列、是否数组、分词类型、日期格式等。
删除索引列:随着业务发展,有些列不再需要查询,可以考虑删掉。
修改路由键:查询时合理指定路由键,减少查询时的读放大并提升性能。
修改预排序:查询时如果数据排序顺序与预排序相同,则可以加速数据查询。
使用流程
动态修改schema的具体流程如下图所示。整个过程对业务层透明,您无需变更业务代码,即可实现轻量级动态修改schema。
修改多元索引schema的主要步骤说明请参见下表。
步骤 | 操作 | 说明 |
1 | 创建灰度索引 | 为源索引创建一个灰度索引,并根据需要新增、修改和删除多元索引的schema。 |
2 | 查看索引同步进度 | 灰度索引会自动同步数据表的数据,等待数据表的存量和增量数据同步到灰度索引,直到同步进度与源索引的进度相同。 |
3 | 设置权重进行A/B测试 | A/B测试功能支持将查询流量按照一定比例分摊到源索引和灰度索引来验证修改schema的效果。 通过A/B测试逐步引流查询流量到灰度索引,直到100%查询流量均切到灰度索引。 |
4 | 交换索引Schema | 查询流量全部切换到灰度索引后,交换源索引和灰度索引的schema。 交换索引后,源索引名会关联到新schema,而灰度索引名会关联到老schema,并且100%查询流量会查询源索引名关联的新schema。 |
5 | 删除灰度索引 | 交换索引并验证索引无误后,建议静置一段时间(例如一天)再删除灰度索引。 |
操作步骤
进入索引管理页签。
登录表格存储控制台。
在页面上方,选择地域和资源组。
在概览页面,单击实例名称或在操作列单击实例管理。
在实例详情页签的数据表列表区域,单击数据表名称或在操作列单击索引管理。
基于源索引创建灰度索引。
在索引管理页签,单击多元索引操作列的修改schema。
在重建索引对话框,根据需要添加、修改或者删除索引字段。
如果需要修改多元索引的路由键或者预排序方式,请打开高级选项开关,然后根据下表说明进行配置。
参数
说明
路由键
自定义路由字段,可以选择部分主键列作为路由字段。
在进行索引数据写入时,会根据路由字段的值计算索引数据的分布位置,路由字段的值相同的记录会被索引到相同的数据分区中。更多信息,请参见多元索引路由字段的使用。
预排序
多元索引默认按照设置的索引预排序方式进行排序。使用多元索引查询数据时,预排序决定了数据的默认返回顺序。更多信息,请参见索引预排序。
如果要按照主键排序,直接选择此参数为默认排序即可。
如果要按照字段值或者主键组合排序,请选择此参数为自定义排序,并进行配置。具体操作如下:
选择排序类型为主键预排序或者字段预排序,并单击添加。
根据实际选择字段名或排序方式。
排序方式支持选择升序和降序。
重要只有选择排序类型为字段预排序时,才需要选择字段名。
使用自定义排序时支持同时配置主键预排序和字段预排序,请根据需要配置。
单击确认重建。
在索引对比对话框,查看源索引和灰度索引的路由键、预排序和schema对比信息,确认无误后,单击确定。
查看索引同步信息。
单击源索引前的图标或者源索引名称。
系统会显示源索引的灰度索引。
单击灰度索引操作列的灰度/上线。
重要灰度索引会经历“存量同步”和“增量同步”两个阶段。
数据同步完成前,将鼠标光标移动至操作列的灰度/上线按钮上,系统会提示切换有风险,禁止用户切换。
当灰度索引同步进度追上源索引的同步进度后,将鼠标光标移动至操作列的灰度/上线上,系统会提示可安全切换,此时请继续执行后续操作。
在灰度/上线对话框,查看索引同步信息。
索引同步完成后,通过设置权重进行A/B测试。
A/B测试功能支持将查询流量按照一定比例分摊到源索引和灰度索引来验证修改schema的效果。仅当查询流量全部都切到灰度索引时,才能继续执行后续步骤。
在灰度/上线对话框的操作区域,拖动滑块调整源索引和灰度索引的权重后,单击设置权重。
在设置权重对话框,查看权重数据和schema对比信息。
确认无误后,单击设置权重。
在系统提示框中单击确定。
查询流量全部切换到灰度索引后,交换源索引和灰度索引的schema。
交换索引后,源索引名会关联到新schema,而灰度索引名会关联到老schema,并且100%查询流量会查询源索引名关联的新schema。
在灰度/上线对话框的操作区域,单击交换索引。
在交换索引对话框,查看源索引和灰度索引的路由键、预排序和schema对比信息,确认无误后,单击确认交换。
交换索引并验证索引无误后,建议静置一段时间(例如一天)再删除源索引。
在灰度/上线对话框,单击删除灰度索引。
在确认删除灰度索引对话框,确认要删除的灰度索引信息正确后,在文本框中输入
我已确认新索引数据已经同步完成并且灰度一定时间
内容。单击确定。
安全性
为了保证操作的安全性,表格存储提供了“回滚机制”和“切换提醒”,最大限度地降低修改索引过程中可能的风险。
回滚机制
动态修改Schema的关键步骤均支持回滚。
创建灰度索引后,如果发现灰度索引的Schema不符合预期,您可以删除后重新创建。
在A/B测试阶段,通过设置查询权重,将查询流量逐步引流到灰度索引。在此过程中,如果发现问题,可以随时重新设置查询权重,将查询流量重新引流到源索引。
交换源索引和灰度索引的Schema后,如果发现问题,您可以随时撤销交换,切回源索引的Schema。交换索引和撤销交换互为逆向操作。
切换提醒
如果在灰度索引的同步进度落后于源索引时将流量切到灰度索引,则可能会出现查询数据回退。此时表格存储会通过源索引和灰度索引的同步状态和最后同步时间,判断“是否可以安全切换”。
当出现如下情况时,表格存储会判断为可安全切换。
当源索引处于全量阶段,灰度索引为全量或者增量阶段,即灰度索引已追上源索引。
源索引和灰度索引均处于增量阶段,且“源索引最后同步时间 - 60 s <= 灰度索引最后同步时间”,即灰度索引落后源索引的时间不超过1分钟。
计费说明
灰度索引构建和数据写入不会产生费用。源索引和灰度索引均会产生与存储规模有关的存储和预留读CU费用。更多信息,请参见多元索引计量计费。
相关文档
如果要在不改变表结构情况下实现新字段新数据类型的查询功能,您可以通过修改多元索引Schema或者新建多元索引时结合虚拟列功能来实现。更多信息,请参见虚拟列。
您可以根据查询场景使用全匹配查询、匹配查询、短语匹配查询、精确查询、多词精确查询、前缀查询、范围查询、通配符查询、多条件组合查询、嵌套类型查询、地理距离查询、地理长方形范围查询、地理多边形范围查询、列存在性查询、折叠(去重)、基于分词的通配符查询、虚拟列等功能查询所需数据。
如果需要使用SQL快速查询多元索引中不同类型的数据,您可以使用SQL查询功能通过多元索引实现。更多信息,请参见SQL查询介绍、创建多元索引的映射关系、查询数据、全文检索、多元索引数组类型、多元索引嵌套类型和多元索引虚拟列。
如果要实现求最小值、求最大值、求和、求平均值、统计行数、去重统计行数、百分位统计、按字段值分组、按范围分组、按地理位置分组、按过滤条件分组、直方图统计、日期直方图统计、获取统计聚合分组内的行、嵌套查询等数据分析需求,您可以使用多元索引统计聚合功能实现。更多信息,请参见统计聚合。