【发布时间】:2019-08-04 00:23:39
【问题描述】:
我使用 DynamoDB 作为 Lambda 和 Springboot 应用程序之间的通信。
为了防止数据库变得太大。我想让数据库在创建消息后的一段时间内删除消息。我在 DynamoDB 中检查了 TTL。它似乎只能删除某个日期的数据,不像每个小时。
是否可以使用 DynamoDB 做到这一点?
我该怎么做?
【问题讨论】:
我使用 DynamoDB 作为 Lambda 和 Springboot 应用程序之间的通信。
为了防止数据库变得太大。我想让数据库在创建消息后的一段时间内删除消息。我在 DynamoDB 中检查了 TTL。它似乎只能删除某个日期的数据,不像每个小时。
是否可以使用 DynamoDB 做到这一点?
我该怎么做?
【问题讨论】:
仅使用 DynamoDB 无法按计划删除数据。
根据您谈论的数据量以及数据的来源,您可以执行以下操作之一:
如果您正在控制写入 Dynamo 的进程,您可以进行更改,以便每当您将需要清理的项目写入 DynamoDB 时,您也会将延迟消息发布到 SQS 队列。然后,您可以有一个单独的 SQS 轮询器,它接收来自 SQS 的延迟消息并从 DynamoDB 中删除相应的项目。
如果您不控制将项目写入数据库的部分(即它们来自 IoT 等),那么您可以在 DynamoDB 上启用流并附加一个 lambda 来处理可以遵循策略的流SQS 延迟消息,或使用 AWS Step Functions 将删除项目的回调延迟一个小时。
所有这一切都假设您不能使用 TTL,这确实是最经济有效的解决方案。使用 TTL,您需要在写入项目时计算过期时间。并且 TTL 可能需要长达 48 小时才能实际删除项目,但如果您同时控制数据的写入者和消费者,您可以让消费者忽略过期的项目。 TTL 将在后台处理过期项目的删除,而无需额外的成本或基础设施。唯一的缺点是,在将项目读取和写入表时必须慎重。
【讨论】: