根据rangeKey检索一定数量的项目,而无需扫描

时间:2018-12-08 18:04:51

标签: amazon-web-services nosql amazon-dynamodb

说我有某种论坛/讨论平台,并且有一个用于存储帖子的dynamodb表。哈希键将是一些唯一的标识符,范围键可能是帖子创建所在的时间戳。

我现在想检索10个最新帖子。但是,我知道扫描操作非常昂贵,因此希望避免使用它。我有什么办法可以查询10个最新帖子而不必执行扫描?

我不确定如何。

1 个答案:

答案 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的字段。主表应使用某种唯一的(不是基于时间的)标识符作为哈希键。