提问者:小点点

在DynamoDB中,分区容量限制与表的总容量有什么关系?


在Dynamodb表中,每个分区都受到1,000个写容量单位和3,000个读容量单位的硬性限制。我不明白的是,这些限制与表的总RCU/WCU有什么关系?

例如,如果我将一个表的RCU配置为6000,WCU配置为3000。这个容量是否被表中的所有分区均匀地使用?还是所有分区都争总容量?

我找不到方法知道DynamoDB表使用了多少分区。有一个指标可以告诉我吗?


共1个答案

匿名用户

仅当您的工作负载非常不平衡以至于大量请求转到同一分区时,单分区限制才有意义。在设计更好的数据模型中,您有大量不同的分区键,这允许 DynamoDB 使用大量不同的分区,因此您永远不会看到很大比例的请求流向同一分区。

然而,这并不意味着所有分区上的负载都相等。很可能一个分区看到的请求数是另一个分区的两倍。几年前,这意味着您的性能会受到影响:DynamicDB在分区之间平均分配已调配的容量(RCU/WCU),因此,随着更繁忙的分区更快地被节流,您从DynamicDB获得的总容量将低于您支付的容量。然而,几年前,他们用所谓的自适应容量解决了这个问题:DynamoDB现在可以检测您的工作负载总容量何时低于您支付的容量,并增加单个分区的容量限制。

例如,如果您预置 10000 个 RCU 容量,而 DynamoDB 将数据划分为 10 个分区,则每个分区开始时都有 1000 个 RCU。但是,如果一个分区获得的请求是另一个分区的两倍,这将导致工作负载仅执行 1000 个 9*500 = 5,500 个 RCU,明显少于您支付的 10,000 个。因此,DynamoDB 很快认识到了这一点,并将繁忙分区的限制从 1,000 个增加到 1,818 个 RCU - 现在总性能为 1,818 个 9*909 = 9,999 个 RCU。DynamoDB 会自动为您执行此操作 - 您无需执行任何特殊操作。您需要做的就是确保您的工作负载具有足够多的不同分区键,并且没有很大比例的请求流向一个特定的分区键 - 否则 DynamoDB 将无法实现高总 RCU - 它将始终受到 3000 的单分区限制的限制。

关于你的最后一个问题,我不知道有没有这样的度量(也许另一个回答者会知道),但需要检查的重要一点是,你有很多分区键。如果是这种情况,并且您的工作负载没有为大部分请求访问一个特定的键,那么您应该是安全的。