什么是哈希和范围主键?

13 浏览
0 Comments

什么是哈希和范围主键?

我无法理解在DynamoDB中的表和数据处理文档中所说的范围/主键是什么。

它是如何工作的?

他们所说的“在哈希属性上无序哈希索引和在范围属性上排序的范围索引”是什么意思?

admin 更改状态以发布 2023年5月20日
0
0 Comments

mkobit已经给出了一个解释得很好的答案,但我将添加一个关于 range key 和 hash key 的大概念。

简单来说,range key + hash key = 组合主键, 这是 DynamoDB 的核心概念enter image description here

主键由 hash key 和可选的 range key 组成。Hash key 用于选择 DynamoDB 的 partition,而 partition 是表数据的组成部分。如果存在的话,range key 用于对 partition 中的项目进行排序。

所以,两者都有不同的作用,并且一起帮助进行复杂的查询。在以上示例中,hashkey1 可以拥有多个 n-range。另一个 range 和 hashkey 的示例是游戏,userA(hashkey) 可以玩 Ngame(range)

enter image description here

在表、项目和属性中描述的 Music table 是具有组合主键(Artist 和 SongTitle)的表的示例。如果提供该项的 Artist 和 SongTitle 值,您就可以直接访问 Music table 中的任何项。

组合主键在查询数据时给您提供了额外的灵活性。例如,如果只提供 Artist 的值,DynamoDB 将检索该艺术家的所有歌曲。要仅检索特定艺术家的歌曲子集,可以提供一个 Artist 值以及 SongTitle 的一系列值。

enter image description here

https://www.slideshare.net/InfoQ/amazon-dynamodb-design-patterns-best-practices
https://www.slideshare.net/AmazonWebServices/awsome-day-2016-module-4-databases-amazon-dynamodb-and-amazon-rds
https://ceyhunozgun.blogspot.com/2017/04/implementing-object-persistence-with-dynamodb.html

0
0 Comments

“Hash and Range Primary Key” 意味着 DynamoDB 中的单个行具有唯一的主键,该主键由哈希键和范围键两个组成。例如,哈希键为 X,范围键为 Y,那么你的主键实际上是 XY。你也可以对于相同的哈希键拥有多个范围键,但是此组合必须是唯一的,如 XZ 和 XA。让我们分别以每种表类型使用他们的例子:\n\n哈希主键 - 主键由一个属性,即哈希属性组成。例如,ProductCatalog 表可以将 ProductID 作为其主键。DynamoDB 在此主键属性上建立无序哈希索引。\n\n这意味着每一行的关键值都是基于这个值的。 DynamoDB 中的每一行都必须针对此属性具有要求、唯一的值。无序哈希索引意味着数据没有进行排序,您不能保证数据的存储方式。您不能在无序索引上进行查询,例如:获取所有具有大于 X 的 ProductID 的行。您需要基于哈希键来编写和获取项。例如,获取 ProductID 为 X 的表中的行。您正在对无序索引进行查询,因此您的获取操作基本上是键-值查找,非常快速,并且使用的吞吐量非常小。\n\n哈希和范围主键 - 主键由两个属性组成,第一个属性是哈希属性,第二个属性是范围属性。例如,论坛 Thread 表可以将 ForumName 和 Subject 作为其主键,其中 ForumName 是哈希属性,Subject 是范围属性。DynamoDB 在哈希属性上建立无序哈希索引,并在范围属性上建立排序范围索引。\n\n这意味着每一行的主键都是哈希键和范围键的组合。如果你拥有哈希键和范围键,你可以直接获取单个行,或者你可以对排序范围索引进行查询。例如,获取具有哈希键 X 且范围键大于 Y 的所有行,或者其他相关查询。与没有索引的字段进行扫描和查询相比,它们具有更好的性能和更少的容量使用。从他们的文档中可知:\n\n查询结果始终按范围键排序。如果范围键的数据类型为数字,则结果按数字顺序返回;否则,结果按 ASCII 字符代码值的顺序返回。默认情况下,排序顺序为升序。要反转顺序,请将 ScanIndexForward 参数设置为 false。\n\n我可能漏掉了一些东西,只是大致了解了一下。在使用 DynamoDB 表时,还有很多要考虑的方面(吞吐量,一致性,容量,其他索引,键分布等)。您应该查看样例表和数据页面来获取示例。

0