【问题标题】:What are hash keys and range keys in dynamodb and how to use themdynamodb 中的哈希键和范围键是什么以及如何使用它们
【发布时间】:2019-08-08 15:34:13
【问题描述】:

我目前正在查看 dynamodb 文档,但不清楚哈希键和范围键是什么以及应该如何使用它们。

我只需要对它们是什么以及应该如何使用它们进行基本解释,以便继续使用它。

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb dynamoose


    【解决方案1】:

    我喜欢这样想:

    • 表中的每个项目(行)都需要有一个唯一 ID(主键)
    • 主键是:
      • 分区键
      • 分区键+排序键

    例如,如果您有一个 Invoices 表,那么主键就是 Invoice Number。如果您有一个 Login 表,那么主键将是 User ID + Timestamp,因为一个用户可以有多个登录。

    在幕后,分区密钥还用于在服务器之间分发数据。这就是 DynamoDB 确保其高速性的方式——当有更多数据时,它会分布在更多服务器上。

    如果一个表(例如登录表)对于给定的分区键(例如用户 ID)有多个条目,那么添加 排序键可确保主键的唯一性,以便可以快速存储和检索项目。

    哈希键 = 分区键

    范围键 = 排序键

    【讨论】:

    • 那么我们可以在同一张表中有两个分区键吗?因为我们在 dynamodb 中不能有唯一的约束。那么我们可以添加一个我们想要使其唯一的列作为分区键吗?
    • 不,每个表都有一个分区键和一个可选的排序键。 DynamoDB 中的唯一约束通过这些键强制执行。
    • 假设我有一个employees 表并且将id 作为分区键并且在同一个表中,我有一个必须是唯一的email 字段。如果我已经将 id 作为分区键,是否可以对电子邮件强制执行唯一约束?
    • 那么规范化是我唯一的选择吗?
    • 唯一的唯一约束是主键(它要么只是分区键,要么是分区键和排序键)。您不能强制任何其他字段是唯一的。另见:Is there a way to enforce unique constraint on a property (field) other than the primary key in dynamodb - Stack Overflow
    【解决方案2】:

    来自DynamoDB Documentation

    哈希键是您的分区键(类似于 SQL 中的主键)。 In a table that has only a partition key, no two items can have the same partition key value. - 没有排序键

    时为真

    范围键是您的排序键(称为复合键) - 使得哈希键 + 范围键的组合成为可能。 The first attribute is the partition key, and the second attribute is the sort key

    例如:

    H1 ​​+ R1 -> H1R1 是一个复合键。

    H1 ​​+ R2 -> H1R2 是另一个复合键。

    对于现实世界的场景,考虑一个用户但有多个角色的情况。

    用户 ID 本身不能用于所有情况。 User-Id + Role-Id 构成唯一的复合键。

    【讨论】:

    • 那么我们可以在同一张表中有两个分区键吗?因为我们在 dynamodb 中不能有唯一的约束。那么我们可以添加一个我们想要使其唯一的列作为分区键吗?
    • 您可以单独拥有 1 个分区键或 1 个(分区 + 排序键)组合。这样您就可以确切地知道如何保持数据的唯一性
    【解决方案3】:

    散列键范围键(又名排序键)共同构成数据库中每个项目的键。但是这两个关键部分有什么区别呢?

    “哈希键”是强制性的。 DynamoDB 是一个分布式表,它使用哈希键来决定在集群的哪个节点上放置此项。特别是,具有相同哈希键的所有项目最终都在同一个节点中。

    它们不只是在同一个节点中结束——它们实际上是按照项目键的第二部分的顺序连续存储在磁盘上的排序,这就是为什么这部分被称为 排序键 - 或 范围键,因为它可以用于读取范围键的两个值之间的项目范围。

    拥有这两个部分的密钥为您提供了强大的方法来对数据进行建模,从而可以有效地检索数据。检索具有特定键的特定项目(GetItem 操作)或具有特定哈希键但范围键范围的所有项目(查询操作)是有效的。 DynamoDB 文档中有很多关于如何使用密钥的两个部分的示例。

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 2016-01-21
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多