DynamoDB:是否值得为一次性迁移工作编制表索引?



我们正在使用脚本将大量具有不同属性的不同表迁移到另一个表,以转换为新的 DynamoDB 表格式。

撇开细节不谈,我们需要将"迁移"属性添加到旧表中的每个项目。为了做到这一点,我们知道我们需要使用新属性进行扫描和更新表中的每个项目。但是,如果我们正在运行的添加此属性的脚本中途死亡,我们将需要重新启动脚本并过滤掉没有此新属性的任何内容(并且仅将新属性添加到缺少它的项目中)。

出现的一个想法是,我们可以在带有 primaryKey + 迁移标志的表上添加一个全局二级索引,这样我们就可以使用它来识别需要更快地迁移的内容。

但是,对于一次性迁移工作(在失败的情况下可能会运行几次),我不确定创建索引的成本是否值得?该表中有数亿个项目,我很难证明创建一个巨大的索引只是为了加快扫描速度。 想法?

为了有效地使用 GSI,理想情况下,您可以将其设置为稀疏索引。它仅包含未迁移的项目。您可以通过在每个项目上设置一个属性"未迁移"来控制这一点,然后在迁移后从项目中删除它,但这将是写入的 4 倍(因为您写入表和索引,一次在添加未迁移标志时,一次在删除它时)。

我建议在扫描表的脚本中定期保存 LastEvaluatedKey,以便在脚本失败时可以从中断的位置继续。要加快扫描速度,您可以并行执行分段扫描。

最新更新