在DynamoDB中将一个表格相同地复制到新表格的最佳方法是什么?
(我并不担心原子性)。
答案 0 :(得分:16)
AWS Pipeline提供了一个可用于此目的的模板:“CrossRegion DynamoDB Copy”
请参阅:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-crossregion-ddb-create.html
结果是一个简单的管道,如下所示:
虽然它被称为CrossRegion,但只要目标表名称不同,就可以轻松地将它用于同一区域(请记住,每个帐户和区域的表名都是唯一的)
答案 1 :(得分:6)
您可以使用Scan读取数据并将其保存到新表中。
在AWS论坛上,来自AWS团队的人使用EMR发布了另一种方法:How Do I Duplicate a Table?
答案 2 :(得分:5)
创建一个备份(backups选项)并使用新的表名还原该表。这样会将所有数据放入新表中。 注意:根据表的大小,会花费大量时间
答案 3 :(得分:0)
我刚刚使用了python脚本dynamodb-copy-table,确保我的凭据在某些环境变量(AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)中,并且它完美无缺。它甚至为我创建了目的地表。
python dynamodb-copy-table.py src_table dst_table
默认区域为us-west-2
,请使用AWS_DEFAULT_REGION
env变量进行更改。
答案 4 :(得分:0)
2017年11月29日推出了 Global Tables 。根据您的使用情况,这可能很有用,这可能与原始问题不同。以下是blog post:
中的一些代码段全局表 - 您现在可以创建跨两个或多个AWS区域自动复制的表,完全支持多主机写入,只需点击几下即可。这使您能够为全局用户群构建快速,大规模的应用程序,而无需管理复制过程。
...
您无需对现有代码进行任何更改。您只需将写入请求和最终一致的读取请求发送到任何指定区域中的DynamoDB端点(与强一致性读取相关联的写入应共享公共端点)。在幕后,DynamoDB实现了多主写,并确保最后一次写入特定项目。使用全局表时,每个项都将包含一个表示最近写入时间的时间戳属性。更新通过DynamoDB Streams以异步方式传播到其他区域,并且通常在一秒钟内完成(您可以使用新的 ReplicationLatency 和 PendingReplicationCount 度量标准对此进行跟踪)。
答案 5 :(得分:0)
如上次答复中所述,数据管道模板不再存在。
在此线程中尝试了其他几个命题后,我最终编写了一个NodeJS脚本来移走数据。也许对您有用?如果您想尝试,我会记录我的方法on my blog here。
答案 6 :(得分:0)
使用此节点js模块:copy-dynamodb-table