按排序顺序查询DynamoDB

时间:2018-11-21 10:30:52

标签: amazon-web-services amazon-dynamodb

我是Dynamodb的新手。我想查询来自Dynamodb的所有记录以及分页。所以我只希望最近的行有100条记录。在我的表格中,我有created数据,其中包含date and time。如果我为GSI创建created,则必须提供分区键作为当前日期或任何日期。但是我不知道桌子上的时间。还有其他分页方法吗?

表结构:

---------------------------------------------
|id    |    created      |   action_type    |
---------------------------------------------
|hash  | 21:22 20/10/2018|   some_type      |
|hash  | 10:12 10/11/2018|   some_type      |

1 个答案:

答案 0 :(得分:1)

DynamoDB的设计意味着它不是特别擅长返回所有项目。

退回所有商品是SCAN,尽管它允许您对退回的商品施加限制,却是always unsorted

获得排序响应的唯一方法是,如果您使用具有分区 sort 键的表QUERY。在这种情况下,您可以在partition上进行查询,它将返回按sort排序的结果(支持升/降)。

还有一个问题为a larger discussion提供了有关您可以对扫描进行排序的修复程序的信息,但实际上可以分解为:

  • 每一项中都有一个设置为相同的属性(我们将其命名为scannable,并将其设置为scan_me
  • 使用分区scannable创建一个全局二级索引,并对created键进行排序
  • 查询scannable == "scan_me",这将返回表中的所有数据(按limit字符串顺序最多返回created

这不是可扩展的解决方案,但是它将“工作”用于少量数据。请注意,正如@ matthew-pope所指出的那样,您的created键没有排序(或更具体地说,它是按小时,分钟,日,月,月,年排序),这意味着您还需要替换{{1 }}键,并带有epoch-seconds或ISO datestring(因为它们都使用默认比较器进行排序)。

最后如果created对您来说很重要,那么可能存在一种使用TOP N模式来维护实例化视图的解决方案。 (这种模式通常是支持在发电机中支持更复杂的“查询”的建议解决方案。)