更新: DynamoDB Streams 解决了这个问题。
DynamoDB Streams捕获任何DynamoDB表中按时间顺序排列的项目级修改序列,并将此信息存储在日志中,最长可达24小时。应用程序可以访问此日志,并在几乎实时的情况下查看数据项在修改之前和之后的状态。
我看到两个选项:
生成当前快照。您需要从表中读取数据来完成此操作,可以以非常缓慢的速度执行(Scan 操作)以保持在容量限制之下。然后,在内存中保留一段时间内执行的更新列表。您可以将这些放在另一个表中,但是您也必须读取它们,这可能会花费同样多的代价。这个时间间隔可以是一分钟、10 分钟、一个小时,或者任何您在应用程序退出时感到舒适的时间间隔。然后,定期从 S3 获取您的快照,回放这些更改并上传新的快照。我不知道您的数据集有多大,所以这可能不切实际,但我见过对于 1-2GB 的数据集使用此方法获得了巨大成功。
增加读吞吐量并每天使用全扫描备份数据。您说您负担不起,但不清楚您是否指支付容量,还是扫描会耗尽所有容量,导致应用程序开始失败。从 DynamoDB 中提取数据的唯一方法是读取它,可以强一致性或最终一致性读取。如果备份是业务需求的一部分,那么我认为您必须确定它是否值得。您可以通过检查结果中的 ConsumedCapacityUnits
属性来自我调节读取。Scan 操作具有 Limit 属性,您可以使用它来限制每个操作中读取的数据量。Scan 还使用最终一致性读取,其价格是强一致性读取的一半。
对于增量备份,您可以将DynamoDB Stream与Lambda函数相关联,以自动触发代码进行每次数据更新(例如:将数据存储到另一个存储库如S3)
您可以使用的Lambda函数来与DynamoDb捆绑进行增量备份:
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/。
希望对你有所帮助。