首页 > 解决方案 > 在 DynamoDB 中为给定表选择哈希键和排序键的有效方法是什么?

问题描述

我正在设置 DynamoDB。我们的数据很简单,它有四个字段:

  1. 用户名
  2. 用户移位结束日期
  3. 用户项目代码
  4. 用户活动

理想情况下,我们应该根据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 行之外的所有用户数据。

我们计划以即时形式存储日期。为了简单起见,我在这里提到了它作为日期

标签: databaseamazon-web-servicesamazon-dynamodbdynamodb-queriesamazon-dynamodb-index

解决方案


在某些情况下,您可能在创建表时只提供一个分区键作为主键。在这些情况下,您只能通过分区键或通过扫描操作返回表中的所有项目来检索数据。以这种方式创建表很简单,在某些情况下,您只需要简单即可。

但是,随着数据集的增长,表扫描在价格和性能方面可能会成为代价高昂的负担。表格扫描会很快耗尽您的阅读能力,从而增加您的账单。

因此,向表添加排序键会打开扫描和分区键之外的更多数据检索功能。您使用排序键不仅可以对数据进行分组和组织,还可以提供额外的方法来查询表中的项目

排序键可用于以下情况:

  • 他们将相关信息收集到一个可以有效查询的地方。排序键的精心设计使您可以使用范围查询和诸如 begin_with、between、>、< 等运算符的范围查询来检索常用的相关项目组。

  • 复合排序键允许您在数据中定义层次(一对多)
    关系,您可以在
    层次结构的任何级别进行查询。

使用排序键,您可以使用 KeyConditionExpression(使用范围)通过使用比较运算符来编写条件语句,该运算符根据键进行评估并限制返回的项目。换句话说,您可以使用特殊运算符按排序键值包含、排除和匹配项目。

关键条件表达式


推荐阅读