dynamodb 中的哈希键和范围键是什么以及如何使用它们
What are hash keys and range keys in dynamodb and how to use them
我目前正在查看 dynamodb 文档,但不清楚哈希键和范围键是什么以及它们应该如何使用。
我只需要基本解释它们是什么以及我应该如何使用它们,以便我可以继续使用它。
哈希键是您的分区键(类似于 SQL 中的主键)。 In a table that has only a partition key, no two items can have the same partition key value.
- 在 缺少排序键时为真
Range key 是你的Sort key(简称Composite Key)- 使得Hash Key + Range Key的组合成为可能。 The first attribute is the partition key, and the second attribute is the sort key
例如:
H1 + R1 -> H1R1 是一个组合键。
H1 + R2 -> H1R2 是另一个组合键。
对于现实世界的场景,请考虑一个用户但具有多个角色的情况。
User Id 本身不能用于所有情况。 User-Id + Role-Id 组成一个唯一的组合键。
哈希键和范围键(a.k.a。排序键 ) 一起构成数据库中每个项目的键。但是这两个关键部分有什么区别呢?
A "hash key" 是强制性的。 DynamoDB 是一个分布式 table,并使用哈希键来决定将此项目放在集群的哪个节点上。特别是,所有具有相同散列键的项目最终都在同一个节点中。
它们不只是在同一个节点中结束 - 它们实际上是连续存储在磁盘上的 sorted 按照项目键的第二部分的顺序,这就是为什么这部分被称为 sort key - 或 range key 因为它可以用来读取两个值之间的项目范围范围键。
拥有密钥的两个部分为您提供了一种强大的方法来以可以有效检索数据的方式对数据进行建模。检索具有特定键的特定项(GetItem 操作)或具有特定散列键但范围键范围的所有项(Query 操作)是有效的。 DynamoDB 文档中有很多关于如何使用密钥的两个部分的示例。
我喜欢这样想:
- table 中的每个项目(行)都需要有一个唯一 ID(主键)
- 主键是:
- 分区键、或
- 分区键 + 排序键
例如,如果您有一个 Invoices table,那么主键就是 Invoice Number。如果您有 Login table,那么主键将是 User ID + Timestamp,因为一个用户可以有多个登录。
在幕后,分区键还用于在服务器之间分发数据。这就是 DynamoDB 确保其高速的方式——当有更多数据时,它分布在更多服务器上。
如果 table(例如登录名 table)对于给定的分区键(例如用户 ID)有多个条目,那么添加 排序键可确保主键的唯一性以便可以快速存储和检索Item。
散列键 = 分区键
范围键 = 排序键
我目前正在查看 dynamodb 文档,但不清楚哈希键和范围键是什么以及它们应该如何使用。
我只需要基本解释它们是什么以及我应该如何使用它们,以便我可以继续使用它。
哈希键是您的分区键(类似于 SQL 中的主键)。 In a table that has only a partition key, no two items can have the same partition key value.
- 在 缺少排序键时为真
Range key 是你的Sort key(简称Composite Key)- 使得Hash Key + Range Key的组合成为可能。 The first attribute is the partition key, and the second attribute is the sort key
例如:
H1 + R1 -> H1R1 是一个组合键。
H1 + R2 -> H1R2 是另一个组合键。
对于现实世界的场景,请考虑一个用户但具有多个角色的情况。
User Id 本身不能用于所有情况。 User-Id + Role-Id 组成一个唯一的组合键。
哈希键和范围键(a.k.a。排序键 ) 一起构成数据库中每个项目的键。但是这两个关键部分有什么区别呢?
A "hash key" 是强制性的。 DynamoDB 是一个分布式 table,并使用哈希键来决定将此项目放在集群的哪个节点上。特别是,所有具有相同散列键的项目最终都在同一个节点中。
它们不只是在同一个节点中结束 - 它们实际上是连续存储在磁盘上的 sorted 按照项目键的第二部分的顺序,这就是为什么这部分被称为 sort key - 或 range key 因为它可以用来读取两个值之间的项目范围范围键。
拥有密钥的两个部分为您提供了一种强大的方法来以可以有效检索数据的方式对数据进行建模。检索具有特定键的特定项(GetItem 操作)或具有特定散列键但范围键范围的所有项(Query 操作)是有效的。 DynamoDB 文档中有很多关于如何使用密钥的两个部分的示例。
我喜欢这样想:
- table 中的每个项目(行)都需要有一个唯一 ID(主键)
- 主键是:
- 分区键、或
- 分区键 + 排序键
例如,如果您有一个 Invoices table,那么主键就是 Invoice Number。如果您有 Login table,那么主键将是 User ID + Timestamp,因为一个用户可以有多个登录。
在幕后,分区键还用于在服务器之间分发数据。这就是 DynamoDB 确保其高速的方式——当有更多数据时,它分布在更多服务器上。
如果 table(例如登录名 table)对于给定的分区键(例如用户 ID)有多个条目,那么添加 排序键可确保主键的唯一性以便可以快速存储和检索Item。
散列键 = 分区键
范围键 = 排序键