database - 在 DynamoDB 中为给定表选择哈希键和排序键的有效方法是什么?
问题描述
我正在设置 DynamoDB。我们的数据很简单,它有四个字段:
- 用户名
- 用户移位结束日期
- 用户项目代码
- 用户活动
理想情况下,我们应该根据UserShiftEndDate
. 我们数据中的所有字段/组合都不是唯一的。我可以为每条记录添加一个自动生成的 ID。
请建议我选择哪些字段作为分区键和排序键或 GSI,以获得基于UserShiftEndDate
.
例如,考虑下表:
用户名 | 用户移位结束日期 | 用户项目代码 | 用户活动 |
---|---|---|---|
用户A | 2020 年 12 月 13 日 | 45 | 监控 |
用户B | 2020 年 12 月 14 日 | 47 | 测试 |
用户c | 2020 年 12 月 17 日 | 45 | 监控 |
用户B | 2020 年 12 月 14 日 | 45 | 测试 |
用户C | 2020 年 12 月 15 日 | 47 | 管理 |
我的查询应将日期作为输入,并应返回shiftEndDate
晚于或等于给定日期的所有用户数据。
例如,如果输入 12/14/2020,则查询应返回除第 1 行之外的所有用户数据。
我们计划以即时形式存储日期。为了简单起见,我在这里提到了它作为日期
解决方案
在某些情况下,您可能在创建表时只提供一个分区键作为主键。在这些情况下,您只能通过分区键或通过扫描操作返回表中的所有项目来检索数据。以这种方式创建表很简单,在某些情况下,您只需要简单即可。
但是,随着数据集的增长,表扫描在价格和性能方面可能会成为代价高昂的负担。表格扫描会很快耗尽您的阅读能力,从而增加您的账单。
因此,向表添加排序键会打开扫描和分区键之外的更多数据检索功能。您使用排序键不仅可以对数据进行分组和组织,还可以提供额外的方法来查询表中的项目。
排序键可用于以下情况:
他们将相关信息收集到一个可以有效查询的地方。排序键的精心设计使您可以使用范围查询和诸如 begin_with、between、>、< 等运算符的范围查询来检索常用的相关项目组。
复合排序键允许您在数据中定义层次(一对多)
关系,您可以在
层次结构的任何级别进行查询。
使用排序键,您可以使用 KeyConditionExpression(使用范围)通过使用比较运算符来编写条件语句,该运算符根据键进行评估并限制返回的项目。换句话说,您可以使用特殊运算符按排序键值包含、排除和匹配项目。
推荐阅读
- c# - 是否可以使用异步任务永久更改布尔值?
- sql-server - 将字符串数据类型日期值转换为日期格式dd-mm-yyyy
- python-3.x - 如何检查数组是否包含没有 for 循环的子数组并检索 True 的索引?
- r - 是否有 R 函数用于在提取到 R 时突出显示粗体字符
- c# - 一些硒回归测试的webResponse错误
- mysql - MySQL更新列的序列号按具有相同值的字段分组
- reactjs - 反应:缺少脚本:开始
- python - 如何从 if else 条件中获取值?
- java - 如何在windows上下载安装IBM AS/400数据库?
- ruby-on-rails - 将erb标签添加到rails中的link_to类