我有一张默认容量表,即5个RCU和5个WCU。根据文档,这将导致Dynamo DB只创建一个分区。
表格结构:
我有一些item_types有一个或两个item id,有些有100,000。我们总共有大约1000万条记录。
我试图了解是否只有一个分区,这将如何产生热键问题?一般来说什么是热键?
答案 0 :(得分:0)
我知道这是一个旧答案,但是我发现了一些有用的信息。
如Partitions and Data distributions中所述:
在以下情况下,DynamoDB会将其他分区分配给表:
-如果将表的预配置吞吐量设置增加到现有分区所不能支持的范围。
-如果现有分区已满,并且需要更多存储空间。
这意味着您无法假设正在使用多少个分区。实际上,DynamoDB的文档从来没有谈论物理分区。相反,他们专注于表格的partitionKey
。
如果您在页面中进行更多研究,则详细说明dynamoDB如何使用partionKey
对逻辑/物理分区进行哈希处理。
如何使用partitionKey
来避免热键?
如Designing Partition Keys to Distribute Your Workload Evenly中所述:
表的主键的分区键部分确定存储表数据的逻辑分区。反过来,这会影响基础物理分区。表的预配置I / O容量在这些物理分区之间平均分配。因此,如果分区密钥设计不能平均分配I / O请求,则可能会创建“热”分区,从而导致节流并低效地使用您提供的I / O容量。
过于简化意味着通常您必须设计partitionKey才能最大化分区/记录因子。
这并不总是正确的:例如,您可以在同一partitionKey
下拥有大量记录,这些记录几乎从不读取或更新,并且很少写入partitionKey
。
以您的情况为例:如果您希望对同一item_type进行大量读/写操作,则最好以不同的方式对数据进行建模。
更多有用的链接:
Best Practices for Designing and Using Partition Keys Effectively
Using Write Sharding to Distribute Workloads Evenly