我有一个需求,那就是我需要将一些数据存储在带有状态和时间戳的dynamo db中。例如:<START, 20180203073000>
现在,当我在SQS中收到一条消息时,上面的状态就变成了STOP。但是,为了使我的系统具有容错性,我需要一些机制,通过这种机制,我可以识别在STOP -db中存在的具有START状态的数据是否超过1天,然后将其状态设置为STOP。因此,它可能不会无限期地等待消息从SQS到达。
有没有aws功能可以用来实现这一点,而不需要定期轮询数据?
发布于 2020-02-20 13:23:29
我不确定这是否能满足您的需求,但这里有一种可能性:
DynamoDB表上的
这样,您将避免表扫描搜索过期项,但在另一方面,可能会有与lambda执行相关的开销。
发布于 2020-02-21 16:55:49
您可以尝试使用状态作为主键,使用时间戳作为排序键来创建GSI。在查询过期项目时,请使用条件表达式,如status = "START" and timestamp < 1-day-ago。
但是要小心,因为这基本上创建了两个热分区(启动和停止),所以确保投影表达式只包含您需要的数据,而不是更多。
如果您有一个在status = START状态上设置的字段,但在其他情况下并不存在,那么您将能够利用sparse index (基本上,如果GSI键不存在于GSI项上,DynamoDB将不会在GSI项中索引任何项,因此您不需要在查询时过滤它们)
https://stackoverflow.com/questions/60312985
复制相似问题