Amazon web services 截断超出TTL允许范围的DynamoDB表

Amazon web services 截断超出TTL允许范围的DynamoDB表,amazon-web-services,amazon-dynamodb,ttl,Amazon Web Services,Amazon Dynamodb,Ttl,我有一个DynamoDB表,它有一个created日期/时间列,指示记录/项目插入表中的时间。我在这个表中有大约20年的数据(记录是从以前的数据库迁移而来的),现在我想继续截断任何超过6个月的数据 这里要做的显而易见的事情是在表上设置一个TTL,为期6个月,但我的理解是AWS TTL只能追溯到一定的年份(如果您知道其他情况,请纠正我!)。所以我的理解是,如果我对20年的数据设置了6个月的TTL,我可能会从6个月开始删除记录,可能会追溯到3-5年,但之后会留下大量真正的旧数据,不受TTL的影响(如

我有一个DynamoDB表,它有一个
created
日期/时间列,指示记录/项目插入表中的时间。我在这个表中有大约20年的数据(记录是从以前的数据库迁移而来的),现在我想继续截断任何超过6个月的数据

这里要做的显而易见的事情是在表上设置一个TTL,为期6个月,但我的理解是AWS TTL只能追溯到一定的年份(如果您知道其他情况,请纠正我!)。所以我的理解是,如果我对20年的数据设置了6个月的TTL,我可能会从6个月开始删除记录,可能会追溯到3-5年,但之后会留下大量真正的旧数据,不受TTL的影响(如果你知道其他情况,请再次纠正我!)。所以我想我在寻找:

  • 能够手动、一次性删除6个月前的数据;及
  • 能够设定未来6个月的TTL
  • 对于第一个问题,我需要执行类似于“从创建位置的mytable中删除”>'2018-06-25',但是我无法从AWS/DynamoDB管理控制台中找到执行方法,有什么想法吗?

    对于第二部分,当我在DynamoDB控制台中转到管理TTL时:


    我不知道我会在哪里设定6个月的有效期。是对话框底部的日期/时间字段吗?!对我来说似乎很奇怪……如果是这样的话,TTL就不会是一个滚动的6个月窗口,它只是一个硬编码的时间点,我需要不断手动更新,这样数据就永远不会超过6个月了……

    关于TTL过去的时间,你是对的,实际上是5年。其工作方式是将TTL属性值与当前时间戳进行比较。如果项目的时间戳早于当前时间戳,则计划在接下来的48小时内删除该项目(不是立即删除)。因此,如果您使用项目创建的时间戳,那么一旦插入,所有内容都将被安排删除,而这不是您想要的


    您在应用程序中管理6个月到期策略的方式。创建项目时,将TTL属性设置为创建时间前6个月的时间戳,并将其保留在那里。迪纳摩将在6个月内删除它。对于您的“遗留”数据,我找不到一种方法来查询和循环每个项目,并手动设置每个项目的TTL。

    直接删除旧记录或更新其TTL以便DynamoDB稍后删除它们,两者都需要相同的写入容量。您需要逐个扫描/查询和删除记录

    比如说,如果您有90%的旧数据,那么删除它最经济、最省时的方法就是将剩余的10%移动到新表中并删除旧表


    我看到的另一种非标准方法是选择一个可以牺牲的现有时间戳字段(例如,审计字段,如创建日期),将其从新记录中删除,并将其用作TTL来删除旧记录。它将允许您以更便宜的价格执行所需操作,而无需切换到另一个表,该表可能需要在应用程序中进行多步更改,但要求字段(a)未被使用,(b)已在使用中,(c)是UNIX时间戳。如果不想永久删除它,可以将其复制到另一个属性,然后在删除所有旧记录并关闭该字段上的TTL(或切换到另一个属性)后再进行复制。它不适用于5年前具有时间戳的记录。

    您好,您能解释一下为什么dynamodb只删除带有ttl的id的字段,而不删除整个记录吗?