如何加速为 Amazon DynamoDB 表创建全局二级索引的过程?

1 分钟阅读
0

我想要为 Amazon DynamoDB 表创建全局二级索引(GSI),但用了很长时间。

简短描述

当您向现有表中添加新的全局二级索引时,IndexStatus 将被设置为 CREATING,并且 Backfilling 将被设置为 true。回填从表中读取项目并确定是否可以将它们添加到索引中。回填索引时,DynamoDB 使用内部系统容量从表中读取项目。这样可以最大限度地减少索引创建带来的影响,并确保表不会耗尽读取容量。

构建全局二级索引所需的时间取决于多个因素:

  • 基表的大小
  • 表中有资格包含在索引中的项目的数量
  • 计划放入索引中的属性的数量
  • 索引的预置写入容量
  • 索引创建过程中对基表执行的写入活动
  • 跨索引分区的数据分配

要加速创建过程,请增加索引的写入容量单位(WCU)数量。

全局二级索引继承基表的读取或写入容量模式。如果您的表处于按需模式,则 DynamoDB 也会在按需模式下创建索引。在这种情况下,您无法增加索引的容量,因为按需 DynamoDB 表会根据传入流量自行扩展。

解决方案

使用 OnlineIndexPercentageProgress Amazon CloudWatch 指标来监控索引创建进度:

1.    打开 DynamoDB 控制台

2.    在导航窗格中,选择,然后从列表中选择表。

3.    选择指标选项卡。

4.    选择查看所有 CloudWatch 指标

5.    在搜索框中,输入 OnlineIndexPercentageProgress
**注意:**如果搜索未返回任何结果,请等待一分钟左右以便指标完成填充。然后重试。

6.    选择索引名称查看进度。

确定您需要的其他 WCU 数量。为此,请将以千字节为单位的表大小除以所需的回填时间。参见以下计算示例。

示例 1

假设您有一个 1GiB(1074000KB)的表。您希望回填过程在 10 分钟(600 秒)内完成。因此,按如下方式计算 WCU 的数量:

1074000 / 600 = 1790 个 WCU

示例 2

假设您希望索引大小为 2GB,并希望在一小时内完成索引创建。因此,按如下方式计算 WCU 的数量:

(2GB * 1024 * 1024)KB/60 分钟/60 秒 = 约 583 个 WCU 所需的 WCU 数量取决于索引大小和您估计的时间。

**注意:**这只是一个估算值。创建时间取决于多个因素,例如您的键分布、项目的大小以及投影到索引中的属性数量。

要预置额外的写入容量,请执行以下操作:

1.    打开 DynamoDB 控制台

2.    在导航窗格中,选择,然后从列表中选择表。

3.    选择容量选项卡。

4.    增加索引的写入容量,然后选择保存

5.    大约一分钟后,检查 OnlineIndexPercentageProgress 指标,以查看创建速度是否得到了提高。

**注意:**您无需预置额外的读取容量。


相关信息

使用二级索引改进数据访问

向现有表添加全局二级索引

管理全局二级索引

AWS 官方
AWS 官方已更新 2 年前