【发布时间】:2019-08-08 15:34:13
【问题描述】:
我目前正在查看 dynamodb 文档,但不清楚哈希键和范围键是什么以及应该如何使用它们。
我只需要对它们是什么以及应该如何使用它们进行基本解释,以便继续使用它。
【问题讨论】:
标签: amazon-web-services amazon-dynamodb dynamoose
我目前正在查看 dynamodb 文档,但不清楚哈希键和范围键是什么以及应该如何使用它们。
我只需要对它们是什么以及应该如何使用它们进行基本解释,以便继续使用它。
【问题讨论】:
标签: amazon-web-services amazon-dynamodb dynamoose
我喜欢这样想:
例如,如果您有一个 Invoices 表,那么主键就是 Invoice Number。如果您有一个 Login 表,那么主键将是 User ID + Timestamp,因为一个用户可以有多个登录。
在幕后,分区密钥还用于在服务器之间分发数据。这就是 DynamoDB 确保其高速性的方式——当有更多数据时,它会分布在更多服务器上。
如果一个表(例如登录表)对于给定的分区键(例如用户 ID)有多个条目,那么添加 排序键可确保主键的唯一性,以便可以快速存储和检索项目。
哈希键 = 分区键
范围键 = 排序键
【讨论】:
哈希键是您的分区键(类似于 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 是一个分布式表,它使用哈希键来决定在集群的哪个节点上放置此项。特别是,具有相同哈希键的所有项目最终都在同一个节点中。
它们不只是在同一个节点中结束——它们实际上是按照项目键的第二部分的顺序连续存储在磁盘上的排序,这就是为什么这部分被称为 排序键 - 或 范围键,因为它可以用于读取范围键的两个值之间的项目范围。
拥有这两个部分的密钥为您提供了强大的方法来对数据进行建模,从而可以有效地检索数据。检索具有特定键的特定项目(GetItem 操作)或具有特定哈希键但范围键范围的所有项目(查询操作)是有效的。 DynamoDB 文档中有很多关于如何使用密钥的两个部分的示例。
【讨论】: