如何在DynamoDB中的列上实现TTL?

时间:2018-01-01 06:10:52

标签: amazon-web-services amazon-dynamodb

在阅读DynamoDB(DDB)文档后,我知道项目/行只有内置TTL。然后我想知道是否有一种方便的方法来实现列的TTL?当TTL到期时,项目列(如果有)中的值将被消除。一般用例是连续的某些区域具有有限的耐久性。 TTL可确保程序业务逻辑的稳健性。

我了解到使用AWS lambda存在DDB触发器,但限制是AWS lambda仅处理DDB流(项目更新)。如果某个项目在表中静默放置很长时间,则在预期的TTL之后,该项目中感兴趣的列将不会被删除。如果我错过了什么,请纠正我。

我知道可以定期添加作业来轮询DDB。我不喜欢这个想法,因为这对DDB来说是一个很大的负担,因为工作需要扫描DDB(索引),扫描可能很耗时,具体取决于感兴趣的DDB表的大小,并且是数据源争用。

此致

六月

2 个答案:

答案 0 :(得分:0)

默认情况下,DynamoDB没有提供在列上启用TTL的机制,请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/time-to-live-ttl-how-to.html,了解有关如何在dynamoDB上启用TTL的更多信息。

您提到的其他解决方案显然无效,如果您应用这些解决方案,您最终会向AWS支付很多费用。

注意: - DynamoDB不是缓存解决方案,其中TTL是非常基本的要求,如果你想要一些基于TTL的功能,那么你应该在DynamoDB之上构建一个缓存(AWS提供弹性缓存,在其下你可以使用memcache或redis)并在那里实现一个TTL。

答案 1 :(得分:0)

正如Amit所提到的,DynamoDB没有提供在列上启用TTL的机制。

那就是说,我可以看到这可以构建在DynamoDB之上。

我没有试过这个,所以这只是理论,但如果有人想要TTL一列;

想象一下两个表: 一个。你想要TTL列的当前表(让我们称之为原文) 湾TTL逻辑将基于的新表(让我们称之为TTL表)

  1. 创建一个新的TTL表,以关闭基于列的TTL,并将Lambda与此关联。
  2. 将Lambda触发器绑定到Original表,您希望TTL为一列,并在每个事件上,使用以下数据在TTL表上执行PUT操作: 一个。原始表中的主键 湾TTL时间 C。要从原始表中删除的属性
  3. 当TTL表在TTL表上过期时,您可以根据主键和属性触发从原始表中删除列。
  4. 似乎可以构建,但我建议彻底测试它。

    HTH