如何有效获取日期范围的分页查询结果

时间:2017-12-05 15:50:31

标签: amazon-dynamodb

刚开始使用NoSql,特别是DynamodB,我被问到以下问题:

现有的表中包含大量行,其字段类似于:

RecordId (Guid = partition key)
RecordType (Guid = sort key)
UserId (Guid)
CreationDateTime
... and some other attributes ...

还有一个GSI(比如GSI1):

UserId = partition key
RecordType = sort key

有些用户生成大量具有相同RecordType的行(可能每天数百或数千),因此该索引通常具有大量具有相同UserId + RecordType的行。

我希望能够有效地为与特定UserId + RecordType匹配的结果执行分页查询,并且在一系列日期中拥有CreationDateTime。

实现这一目标的最佳方法是什么?

有人向我建议我可以使用partitionKey = Userid和Sort key = CreationDateTime创建第二个GSI(比如说GSI2)。这个想法是,这将是一个有效的方法来找到所需日期范围内的UserId + RecordType的第一行,然后这将用作在GSI1中搜索的起点(PaginationToken)。只有在GSI1中具有重复键的行按创建顺序存储时才能使用。

这有意义吗?如果没有,那会是更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您的查询是:"特定的UserId + RecordType,以及CreationDateTime范围" 所以你回答了自己:

创建GSI:

hash = UserId_RecordType(1234_type1)

range = CreationDateTime

通过这种方式,您可以获取RecordType用户的所有文档,按CreationDateTime

排序

小心热键。