Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb DynamoDB:为一次性迁移工作索引一个表是否值得?_Amazon Dynamodb - Fatal编程技术网

Amazon dynamodb DynamoDB:为一次性迁移工作索引一个表是否值得?

Amazon dynamodb DynamoDB:为一次性迁移工作索引一个表是否值得?,amazon-dynamodb,Amazon Dynamodb,我们正在使用一个脚本将大量具有不同属性的不同表迁移到另一个表,以转换为新的DynamoDB表格式 撇开细节不谈,我们需要将迁移的属性添加到旧表中的每个项中。为了做到这一点,我们知道我们需要扫描并使用新属性更新表中的每个项目。但是,如果我们正在运行的添加此属性的脚本中途死亡,我们将需要重新启动脚本并过滤掉没有此新属性的任何内容,只将新属性添加到缺少它的项中 出现的一个想法是,我们可以使用primaryKey+migrated标志在表中添加一个全局二级索引,这样我们就可以使用它来确定需要更快地迁移哪

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

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

出现的一个想法是,我们可以使用primaryKey+migrated标志在表中添加一个全局二级索引,这样我们就可以使用它来确定需要更快地迁移哪些内容


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

要有效地使用GSI,您最好将其设置为稀疏索引。它将只包含未分解的项目。您可以通过在每个项上设置一个属性ungrated来控制这一点,然后在迁移该项后将其从该项中删除,但这将使写入量增加4倍,因为在添加ungrated标志时写入表和索引,在删除该标志时写入


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

您是否考虑过使用AWS数据库迁移服务执行此任务?它会自动管理迁移工作人员,并会处理任何失败/重试,因此您无需担心。@MatthewPope是的-不幸的是,我们不能将迁移服务用于我们的用例,因为不是从一个表直接写入另一个表,我们必须检查我们的服务用于接收和审计的一些API。您可以通过使用DMS将所有内容提取到S3中的tmp存储桶,然后应用自定义解决方案将其从S3发送到您的接收API,从而避免需要索引。一旦S3文件成功加载到新表中,请将其从S3中删除,以便不再对其进行处理。您还可以添加一些东西,使其更具容错性,但这太适合于评论了。