了解Dynamo DB中的热键

时间:2018-04-16 12:34:38

标签: amazon-web-services amazon-dynamodb

我有一张默认容量表,即5个RCU和5个WCU。根据文档,这将导致Dynamo DB只创建一个分区。

表格结构:

  • 分区键:item_type
  • 排序键:item_id

我有一些item_types有一个或两个item id,有些有100,000。我们总共有大约1000万条记录。

我试图了解是否只有一个分区,这将如何产生热键问题?一般来说什么是热键?

1 个答案:

答案 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