DynamoDB - 如何进行增量备份?

时间:2013-04-01 12:26:36

标签: backup amazon-dynamodb

我正在使用具有针对应用程序用例优化的密钥和吞吐量的DynamoDB表。为了支持其他临时管理和报告用例,我想在S3中保留一个完整的备份(一天的备份是可以的)。同样,我无法扫描整个DynamoDB表来进行备份。我所拥有的钥匙不足以找出什么是“新”。如何进行增量备份?我是否必须修改我的DynamoDB架构,或者只是添加额外的表来执行此操作?任何最佳做法?

更新DynamoDB Streams解决了这个问题。

  

DynamoDB Streams捕获按时间排序的项目级别序列   修改任何DynamoDB表,并将此信息存储在   记录长达24小时。应用程序可以访问此日志并查看   它们在修改之前和之后出现的数据项   接近实时。

4 个答案:

答案 0 :(得分:6)

我看到两个选项:

  1. 生成当前快照。您必须从表格中读取此操作,您可以以非常慢的速率执行此操作以保持在容量限制之下(Scan操作)。然后,在一段时间内保持内存中的更新列表。你可以将它们放在另一个表中,但是你也必须阅读它们,这可能会花费同样多的钱。这个时间间隔可以是一分钟,10分钟,一小时,如果你的应用程序退出,你会感到很舒服。然后,定期从S3获取快照,在快照上重播这些更改,并上载新快照。我不知道你的数据集有多大,所以这可能不太实际,但我已经看到这对于1-2GB的数据集非常成功。

  2. 每天使用完整扫描添加读取吞吐量并备份数据。你说你负担不起,但是你不清楚你是否意味着支付容量,或扫描会耗尽所有容量而应用程序会开始失败。从DynamoDB中提取数据的唯一方法是读取它,强烈或最终一致。如果备份是您业务需求的一部分,那么我认为您必须确定它是否值得。您可以通过检查结果上的ConsumedCapacityUnits属性来自我控制阅读。 “扫描”操作具有“限制”属性,可用于限制每个操作中读取的数据量。扫描还使用最终一致的读取,这是强一致读取的一半。

答案 1 :(得分:4)

现在,您可以使用dynamoDB流将数据保留在anthother表中,或者在另一个数据存储中维护另一个数据副本。

https://aws.amazon.com/blogs/aws/dynamodb-streams-preview/

答案 2 :(得分:4)

对于增量备份,您可以将DynamoDB Stream与Lambda函数关联,以自动触发每次数据更新的代码(即:数据到另一个商店,如S3)

可用于绑定DynamoDb以进行增量备份的lambda函数:

https://github.com/PageUpPeopleOrg/dynamodb-replicator

我已经详细介绍了如何使用DynamoDB Streams,Lambda和S3版本的存储桶在我的博客上为DynamoDb中的数据创建增量备份:

https://www.abhayachauhan.com/category/aws/dynamodb/dynamodb-backups

或者,DynamoDB只是实现了按需备份和恢复。它们不是增量备份,而是完整备份快照。

查看https://www.abhayachauhan.com/2017/12/dynamodb-scheduling-on-demand-backups/了解详情。

HTH

答案 3 :(得分:0)

DynamoDB中的扫描操作返回按主键(散列键)排序的行。因此,如果表的散列键是自动递增的整数,则在执行下一次备份时将扫描请求的上次备份期间保存的最后一条记录的哈希键设置为“lastEvaluatedKey”参数,并且扫描将返回具有自上次备份以来已创建。