【问题标题】:How to make DynamoDB deletes data every hour since the data is created?如何让 DynamoDB 自创建数据后每小时删除一次数据?
【发布时间】:2019-08-04 00:23:39
【问题描述】:

我使用 DynamoDB 作为 Lambda 和 Springboot 应用程序之间的通信。

为了防止数据库变得太大。我想让数据库在创建消息后的一段时间内删除消息。我在 DynamoDB 中检查了 TTL。它似乎只能删除某个日期的数据,不像每个小时

是否可以使用 DynamoDB 做到这一点?

我该怎么做?

【问题讨论】:

    标签: database amazon-dynamodb


    【解决方案1】:

    仅使用 DynamoDB 无法按计划删除数据。

    根据您谈论的数据量以及数据的来源,您可以执行以下操作之一:

    如果您正在控制写入 Dynamo 的进程,您可以进行更改,以便每当您将需要清理的项目写入 DynamoDB 时,您也会将延迟消息发布到 SQS 队列。然后,您可以有一个单独的 SQS 轮询器,它接收来自 SQS 的延迟消息并从 DynamoDB 中删除相应的项目。

    如果您不控制将项目写入数据库的部分(即它们来自 IoT 等),那么您可以在 DynamoDB 上启用流并附加一个 lambda 来处理可以遵循策略的流SQS 延迟消息,或使用 AWS Step Functions 将删除项目的回调延迟一个小时。

    所有这一切都假设您不能使用 TTL,这确实是最经济有效的解决方案。使用 TTL,您需要在写入项目时计算过期时间。并且 TTL 可能需要长达 48 小时才能实际删除项目,但如果您同时控制数据的写入者和消费者,您可以让消费者忽略过期的项目。 TTL 将在后台处理过期项目的删除,而无需额外的成本或基础设施。唯一的缺点是,在将项目读取和写入表时必须慎重。

    【讨论】:

    • 我可以使用 TTL,但我可以为插入到 DynamoDB 中的每个数据设置过期时间吗?如果代码像下面的链接,每次我将数据插入数据库时​​,我应该更新TimeToLive? stackoverflow.com/questions/42812415/…
    • 是的,每个项目都有自己的过期时间戳值。 TTL 有点用词不当。是的,每当您插入一个项目时,您都必须设置它的到期时间。如果您希望它在一小时后过期,那么您在插入项目并存储它时计算该时间。
    • 你确定吗?我在这里找到文档:link 不能每次向 DynamoDB 中添加项目时都更新它
    • 确定什么?您是指为表启用 TTL 吗?是 - 必须通过指定将用作每个项目的过期属性的属性来为整个表启用 TTL。但是每个项目都有自己的过期值。
    • 对不起,我误解了 TTL 的东西。我想我需要调用一个方法来为每个项目使用 ttl。只需添加过期 unix 时间作为每个项目的属性。
    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2017-07-13
    • 2018-11-29
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多