按排序顺序查询DynamoDB



我是Dynamodb的新手。我想查询Dynamodb中的所有记录以及分页。所以我只想要最近行的100条记录。在我的表中,我有包含date and timecreated数据。如果我为created创建GSI,那么我必须提供分区密钥作为当前日期或任何日期。但是我不知道表上的时间。有其他方法可以分页吗?

表格结构:

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

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

返回所有项目是一个SCAN,尽管它允许您对返回的项目施加限制,但它总是未排序的。

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

还有一个问题给出了一个更大的讨论,关于可以对扫描进行排序的修复,但实际上它可以分解为:

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

这不是一个可扩展的解决方案,但它可以"工作"于少量数据。请注意,正如@matthew-pope所指出的,您的created密钥不排序(或者,更具体地说,它按小时-分钟-天-月-年排序(,这意味着您还需要将created密钥替换为epoch秒或ISO日期字符串(因为这两个密钥都使用默认比较器排序(。

最后如果TOP N对您很重要,那么可能有一个使用dynamodb -> dynamodb streams -> lambda -> another dynamodb table模式来维护实体化视图的解决方案。(这种模式通常是建议的解决方案,以支持发电机中更复杂的"查询"。(

最新更新