根据日期/天存档Dynamodb

时间:2016-08-26 21:26:37

标签: python amazon-s3 amazon-dynamodb boto3 amazon-data-pipeline

我想归档dynamodb表,只保留数据90天。我在表格中有一个名为recorded_on的字段,可用于跟踪90天。看看Datapipeline,因为我们不需要它,所以它似乎与EMR有点过分。有更好的方法吗?

1. Cronjob that will continue to run everyday and match recorded_on + 90days > today's date and put those rows in s3 and delete those rows.

2. Separate cronjob to put data from s3 to redshift everyday.

3 个答案:

答案 0 :(得分:0)

为什么您认为使用AWS数据管道过度杀伤?您可以使用自定义作业,但它需要额外的工作,管道会自动为您执行此操作。

它在幕后使用EMR集群的事实不应该是一个问题,因为它的细节无论如何都是从你身上抽象出来的。设置管道以将dynamoDb归档到s3非常容易。要删除超过90天的数据,您可以编写自定义脚本&使用数据管道ShellCommandActivity(http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-shellcommandactivity.html)来执行它。

以下是数据管道相对于CRON的一些好处:

  1. 发生故障时重试。
  2. 监视/警报。
  3. 无需提供EC2,AWS负责幕后的一切工作。
  4. 控制导出可以使用多少dynamoDb容量,这对于防止导出作业影响其他系统非常重要。
  5. 它也很便宜,https://aws.amazon.com/datapipeline/pricing/

    此致 Dinesh Solanki

答案 1 :(得分:0)

您可以创建一个计划的Lambda函数,该函数每天(或以您想要的任何间隔)运行,执行查询并归档项目。

或者,如果您希望扩展和执行更好,您可以让Lambda函数执行查询,然后为需要归档的每个项目的SNS主题写一条消息,并在该SNS上具有另一个Lambda函数触发器主题并执行存档操作。

答案 2 :(得分:0)

我知道这是一个老问题,但是为了任何绊倒这个问题的人:

您现在可以使用DynamoDB TTL(生存时间)功能自动删除旧数据。然后,可以使用由该表上的流事件触发的lambda函数将已删除的记录存档到S3 - 或者您喜欢的任何位置。

有关如何在AWS博客上实现此目的的详细帖子:https://aws.amazon.com/blogs/database/automatically-archive-items-to-s3-using-dynamodb-time-to-live-with-aws-lambda-and-amazon-kinesis-firehose/