我正在使用DynamoDB作为Lambda和Springboot应用程序之间的通信。
防止DB太大。自创建消息以来,我想让数据库在一定时间间隔内删除该消息。我在DynamoDB中检查了TTL。似乎只能删除日期中的数据,不能像每小时一样删除。
使用DynamoDB是否可以做到这一点?
我应该怎么做?
答案 0 :(得分:2)
单独使用DynamoDB不能按计划删除数据。
根据您正在谈论的数据量以及数据来自何处,您可以执行以下操作之一:
如果您正在控制写入Dynamo的过程,则可以进行更改,以便每当您将需要清除的项目写入DynamoDB时,也会将延迟的消息发布到SQS队列中。然后,您可以有一个单独的SQS轮询器,该轮询器从SQS接收延迟的消息,并从DynamoDB中删除相应的项目。
如果您不控制将项目写入数据库的部分(例如,它们来自物联网等),则可以在DynamoDB上启用流并附加一个lambda来处理流,该流可以遵循以下策略: SQS延迟消息,或使用AWS Step Functions将回调延迟一小时将其删除。
所有这一切都假设您不能使用TTL,这确实是最经济和有效的解决方案。使用TTL,您需要在写入项目时计算失效时间。 TTL可能最多需要48个小时才能真正删除项目,但是如果您同时控制写入者和数据使用者,则可以让使用者忽略过期的项目。 TTL将在后台处理过期项目的清除,而无需额外的成本或基础架构。唯一的缺点是,在将项目读取和写入表中时必须谨慎。