我是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 |
答案 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
模式来维护实例化视图的解决方案。 (这种模式通常是支持在发电机中支持更复杂的“查询”的建议解决方案。)