我有一个DynamoDB表,该表具有一个created
日期/时间列,该列指示何时将记录/项目插入到表中。该表中有大约20年的数据(记录是从以前的数据库中迁移过来的),现在我想截断超过6个月的任何数据。
这里要做的显而易见的事情是在桌子上设置一个TTL 6个月,但是我的理解是AWS TTL只能追溯到一定年限(如果您不知道的话,请纠正我!)。因此,我的理解是,如果我对20年的数据设置了6个月的TTL,则可能会删除6个月前开始的记录,可能需要3到5年的时间,但是实际上会有很多 < / em>遗留的旧数据,不受TTL的影响(如果不知道,请再次纠正我!)。所以我想我正在寻找:
对于第一个,我需要执行类似 DELETE FROM mytable WHERE created > '2018-06-25'
的程序,但是我无法从AWS / DynamoDB管理控制台中找出如何执行此操作,任何想法?
第二部分,当我进入DynamoDB控制台中的 Manage TTL 时:
我实际上没有看到将6个月的到期日设置在哪里。是对话框最底部的日期/时间字段吗?对我来说似乎很奇怪...如果是这种情况,那么TTL不会是滚动的6个月窗口,那只是硬编码的时间点,我需要手动保持更新,以便数据永远不会超过6个月大了...
答案 0 :(得分:1)
您对TTL的回溯时间是正确的,它实际上是5年。它的工作方式是将TTL属性值与当前时间戳进行比较。如果您的项目的时间戳早于当前时间戳,则计划在接下来的48小时内删除(不是立即发生)。因此,如果使用创建项目的时间戳记,则所有内容都会安排在插入后立即删除,而这并不是您想要的。
管理六个月有效期的方法是在您的应用程序中。创建项目时,请将TTL属性设置为比创建时间提前6个月的时间戳,然后将其保留在那里。 Dynamo将在6个月内将其删除。对于您的“旧版”数据,我看不到查询和循环浏览每个项目以及手动设置每个项目的TTL的方法。
答案 1 :(得分:0)
直接删除旧记录或更新它们的 TTL 以便稍后由 DynamoDB 删除它们都需要相同的写入容量。您需要一条一条地扫描/查询和删除记录。
假设您拥有 90% 的旧数据,那么最经济、最省时的删除方式是将剩余的 10% 移至新表并删除旧数据。
我看到的另一种非标准方法是选择一个可以牺牲的现有时间戳字段(例如,创建日期等审计字段),将其从新记录中删除并用作 TTL 来删除旧记录。它将允许您以更便宜的方式执行您需要的操作,而无需切换到可能需要在您的应用程序中进行多步更改的另一个表,但要求该字段 (a) 未使用,(b) 过去和 (c) ) 是一个 UNIX 时间戳。如果您不想永久删除它,您可以将其复制到另一个属性,并在删除所有旧记录并且该字段的 TTL 关闭(或切换到另一个属性)后复制回来。它不适用于具有 5 年前时间戳的记录。