首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在亚马逊网络服务dynamoDB中查找过期数据

在亚马逊网络服务dynamoDB中查找过期数据
EN

Stack Overflow用户
提问于 2020-02-20 12:39:52
回答 2查看 1.2K关注 0票数 0

我有一个需求,那就是我需要将一些数据存储在带有状态和时间戳的dynamo db中。例如:<START, 20180203073000>

现在,当我在SQS中收到一条消息时,上面的状态就变成了STOP。但是,为了使我的系统具有容错性,我需要一些机制,通过这种机制,我可以识别在STOP -db中存在的具有START状态的数据是否超过1天,然后将其状态设置为STOP。因此,它可能不会无限期地等待消息从SQS到达。

有没有aws功能可以用来实现这一点,而不需要定期轮询数据?

EN

回答 2

Stack Overflow用户

发布于 2020-02-20 13:23:29

我不确定这是否能满足您的需求,但这里有一种可能性:

DynamoDB表上的

  1. Enable TTL。如果您的timestamp数据属性是包含纪元格式的时间的Number数据类型,这将起作用。一旦时间戳过期,相应的项就会从DynamoDB表的background.
  2. Enable Streams表中删除。被TTL删除的项目将被发送到流。将DynamoDB流连接到Lambda函数的
  3. Create Trigger。在您的情况下,触发器将接收整个已删除的项目。
  4. 修改您的记录(将“START”设置为“STOP”),删除您的时间戳属性(没有TTL属性的项目不会被删除),然后重新插入到表中。

这样,您将避免表扫描搜索过期项,但在另一方面,可能会有与lambda执行相关的开销。

票数 2
EN

Stack Overflow用户

发布于 2020-02-21 16:55:49

您可以尝试使用状态作为主键,使用时间戳作为排序键来创建GSI。在查询过期项目时,请使用条件表达式,如status = "START" and timestamp < 1-day-ago

但是要小心,因为这基本上创建了两个热分区(启动和停止),所以确保投影表达式只包含您需要的数据,而不是更多。

如果您有一个在status = START状态上设置的字段,但在其他情况下并不存在,那么您将能够利用sparse index (基本上,如果GSI键不存在于GSI项上,DynamoDB将不会在GSI项中索引任何项,因此您不需要在查询时过滤它们)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60312985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档