刚开始使用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中具有重复键的行按创建顺序存储时才能使用。
这有意义吗?如果没有,那会是更好的方法吗?
答案 0 :(得分:1)
如果您的查询是:"特定的UserId + RecordType,以及CreationDateTime范围" 所以你回答了自己:
创建GSI:
hash = UserId_RecordType(1234_type1)
range = CreationDateTime
通过这种方式,您可以获取RecordType用户的所有文档,按CreationDateTime
排序小心热键。