【发布时间】:2014-08-05 15:09:02
【问题描述】:
我想我理解没有热 hashKeys 的概念,以便您使用所有分区来配置吞吐量。但是 UUID hashKeys 在跨分区分布方面是否比按数字顺序排列的更好?在这两种情况下,是从键生成的哈希码和用于分配给分区的值吗?如果是这样,来自两个字符串(如:“100444”和“100445”)的哈希码有何不同?他们离得很近吗?
【问题讨论】:
标签: amazon-dynamodb
我想我理解没有热 hashKeys 的概念,以便您使用所有分区来配置吞吐量。但是 UUID hashKeys 在跨分区分布方面是否比按数字顺序排列的更好?在这两种情况下,是从键生成的哈希码和用于分配给分区的值吗?如果是这样,来自两个字符串(如:“100444”和“100445”)的哈希码有何不同?他们离得很近吗?
【问题讨论】:
标签: amazon-dynamodb
“100444”和“100445”不太可能在同一个分区中,而不是完全不同的数字,例如“12345”。将 DynamoDB 表想象成一个大哈希表,其中表的哈希键是进入哈希表的键。底层哈希表是由键的哈希组织的,而不是键本身。您会发现数字和字符串 (UUID) 在 DynamoDB 中的分布都很好,就它们在分区之间的分布而言。
UUID 在 DynamoDB 中很有用,因为很难以可扩展的方式为主键生成序号。随机数适用于主键,但很难无间隙地生成顺序值,并且很难以可扩展到您可以在 DynamoDB 表中预置的吞吐量级别的方式生成。当您将新项目插入 DynamoDB 表时,您可以使用 conditional writes 确保不存在具有该主键值的项目。
(注意:这个问题也在this AWS Forums post 中交叉发布并在那里进行了讨论)。
【讨论】: