我正在设置DynamoDB。我们的数据很简单,它有四个字段:
- 用户名
- 用户轮班结束日期
- 用户项目代码
- 用户活动
理想情况下,我们应该基于UserShiftEndDate
查询用户。我们的数据中没有一个字段/组合是唯一的。我可以为每条记录添加一个自动生成的ID。
请建议我选择哪些字段作为分区键和排序键或GSI,以获得基于UserShiftEndDate
的查询的最佳响应时间。
例如,考虑下表:
UserName | UserShiftEndDate | 用户项目代码用户活动 | ||
---|---|---|---|---|
用户A | 2020年12月13日 | 45 | 监控||
用户B | 2020年12月14日 | 47 | 测试||
用户 | 2020年12月17日 | 45 | 监控||
用户B | 2020年12月14日 | 45 | 测试||
用户C | 2020年12月15日 | 管理 |
在某些情况下,创建表时可能只提供分区键作为主键。在这些情况下,只能通过分区键或通过扫描操作返回表中的所有项来检索数据。以这种方式创建表很简单,在某些情况下,您只需要简单即可。
然而,随着数据集的增长,表扫描可能会在价格和性能方面成为一种昂贵的负担。扫描表格会很快耗尽你的阅读能力,从而增加你的账单。
因此,在表中添加排序键可以打开扫描和分区键之外的更多数据检索功能。使用排序键不仅可以对数据进行分组和组织,还可以为查询表中的项提供其他方法。
排序键适用于以下情况:
-
他们在一个可以收集相关信息的地方收集相关信息高效查询。精心设计的排序键可以让您检索使用范围查询的常用相关项组诸如begins_with、between、>、<,等等
-
复合排序键允许您在数据中定义分层(一对多(
关系,您可以在
层次结构的任何级别查询这些关系。
使用排序键时,可以使用KeyConditionExpression(使用范围(通过使用比较运算符来编写条件语句,该运算符根据键进行计算并限制返回的项。换句话说,您可以使用特殊的运算符来根据项目的排序键值来包括、排除和匹配项目。
KeyConditionExpression