说我有某种论坛/讨论平台,并且有一个用于存储帖子的dynamodb表。哈希键将是一些唯一的标识符,范围键可能是帖子创建所在的时间戳。
我现在想检索10个最新帖子。但是,我知道扫描操作非常昂贵,因此希望避免使用它。我有什么办法可以查询10个最新帖子而不必执行扫描?
我不确定如何。
答案 0 :(得分:1)
您应该使用GSI,将“ yyyy-mm-dd”之类的属性用作哈希键,并将timestamp
作为范围键。由于一天中可能有少于10条评论,因此您可能需要多个查询,但这很容易实现。
伪代码:
currentDate = today
while (results.size < 10)
results.add(queryDynamoDB(currentDate))
currentDate.subtract(1 day)
查询索引时,查询请求应具有
scanIndexForward = false
limit = 10
这样,它将最多返回10个结果,这是给定日期的最新时间戳。如果您的论坛不是很活跃,或者新的一天刚刚开始,您只需要查询一天以上。 (查询一天以上不会增加RCU的额外成本,而只是增加延迟)。
编辑:请注意,这是我建议的GSI。 YYYY-MM-DD字段是仅用于GSI的字段。主表应使用某种唯一的(不是基于时间的)标识符作为哈希键。