我有一张默认容量为5个RCU和5个WCU的表格。根据文档,这将导致Dynamo DB只创建一个分区。
表结构:
- 分区键:item_type
- 排序键:item_id
我有一些item_type只有一个或两个item_id,而有些则有10万个。我们总共有大约1000万条记录。
我试图理解如果只有一个分区,那么如何会产生热点键的问题?热点键一般指什么?
我有一张默认容量为5个RCU和5个WCU的表格。根据文档,这将导致Dynamo DB只创建一个分区。
表结构:
我有一些item_type只有一个或两个item_id,而有些则有10万个。我们总共有大约1000万条记录。
我试图理解如果只有一个分区,那么如何会产生热点键的问题?热点键一般指什么?
我知道这个答案有些旧了,但我找到了一些有用的信息。
如《分区与数据分布》所述:
DynamoDB在以下情况下为表分配其他分区:
- 如果您将表的预配置吞吐量设置增加到现有分区可以支持的范围之外。
- 如果现有分区填满容量并需要更多存储空间。
这意味着您不能假设您使用了多少分区。实际上,DynamoDB的文档从未涉及物理分区。相反,他们关注的是表的 partitionKey
。
如果您在页面中继续深入挖掘,则会详细解释 DynamoDB 如何使用 partionKey
对逻辑/物理分区进行哈希处理。
如何使用 partitionKey
避免热点问题?
如《设计分区键以均匀分布工作负载》所述:
表的主键的分区键部分确定存储表数据的逻辑分区。这反过来又影响基础物理分区。表的预配I/O容量平均分配在这些物理分区中。因此,如果分区键设计不平均地分配 I/O 请求,则可能会创建导致限制和低效使用预配 I/O 容量的“热”分区。
简单地说,这意味着您通常需要设计您的 partitionKey
以最大化分区/记录系数。
这并非总是正确的:例如,您可以在相同的 partitionKey
下拥有大量几乎从不被读取或更新的记录,并且针对该 partitionKey
的写入很少。
在您的情况下:如果您希望对同一项类型进行大量读写,则最好以不同的方式建模您的数据。
更多有用的链接: