我认为我理解没有热hashKeys的概念,因此您可以在配置吞吐量中使用所有分区。但UUID hashKeys在分区上分配比数字排序更好吗?在这两种情况下都是从密钥生成的哈希码和用于分配给分区的值?如果是这样,两个字符串的哈希码如何:" 100444"和" 100445"不同?他们关闭了吗?
答案 0 :(得分:13)
“100444”和“100445”不太可能在完全不同的数字中位于同一分区中,例如“12345”。将DynamoDB表视为一个大哈希表,其中表的哈希键是哈希表的关键。底层哈希表由密钥的哈希组织,而不是由密钥本身组织。你会发现数字和字符串(UUID)在DynamoDB中的分布都很好。
UUID在DynamoDB中很有用,因为难以以可扩展的方式为主键生成序列号。随机数对于主键很有效,但是顺序值很难生成而没有间隙,并且可以扩展到您可以在DynamoDB表中配置的吞吐量级别。将新项目插入DynamoDB表时,可以使用conditional writes确保该项目不存在该主键值。
(注意:这个问题也在this AWS Forums post中交叉发布,并在那里讨论过。)