DynamoDB的分区在包含排序键时的工作原理

0

【以下的问题经过翻译处理】 我对DynamoDB的问题是关于这个的:https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/

它说:“如果集合大小增长超过10GB,DynamoDB会通过排序键拆分分区。”

这是意味着它会使用排序键进行分区吗?也就是PK+SK将用于计算哈希吗?还是说它将按SK排序,因此一旦一个分区填满,下一个分区将从上一个分区的位置继续?但仍然只使用PK来计算哈希

我想知道我的分区键的基数是由PK还是PK+SK确定的。 如果是后者,那么像“删除所有PK = X项”的操作,不会有太大的热键/热分区问题,因为SK应该在许多分区中分布操作。但是,如果具有相同PK的所有项都捆绑在一个分区(或几个分区)中,那么它绝对是一个问题。

profile picture
专家
已提问 9 个月前21 查看次数
1 回答
0

【以下的回答经过翻译处理】 分区键被散列以确定项将进入哪个分区。在该分区中,每个分区键的项集合根据排序键顺序进行保持。如果项集合变得足够大,则可能会在多个分区之间分割,在这种情况下,会选择一个排序键的分拆点,具有在该点之前的SK的项进入一个分区,而具有在该点之后的SK的项进入另一个分区。

比喻时间。将DynamoDB视为一组电话簿。 PK就像城市名称,它的值确定要使用哪个电话簿。 SK就像每本书中的名称,按线性顺序排列。您希望PK的分散度很好,这样就可以有很多电话簿和许多并行处理。对于像纽约这样的城市,它足够大,您可以将名称分割到几本书籍中,例如A-M和N-Z。

更详细地说,城市名称的哈希值确定了可以找到该城市电话簿的架子。因此,散列PK,找到架子,找到正确的电话簿,使用书中排序的值。这一切都非常高效。一些城市可能需要一个或多个架子。

一些常见的个人名称可以这么常见,以至于为了分散游客流量,它们可以拥有自己的页面架子。

profile picture
专家
已回答 9 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则