分区容量限制与 table 在 DynamoDB 中的总容量有何关系?

How does partition capacity limit relate to table's total capacity in DynamoDB?

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

例如,如果我将table的RCU配置为6000,WCU配置为3000,这个容量是否被table中的所有分区平均使用?还是所有分区都在争夺总容量?

我无法找到了解 DynamoDB table 使用了多少个分区的方法。有一个指标可以告诉我吗?

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

但是,这并不意味着所有分区上的负载都相等。很可能一个分区看到的请求数量是另一个分区的两倍。几年前,这意味着您的性能受到影响:DynamoDB 在分区之间平均分配配置容量 (RCU/WCU) ,因此随着较忙的分区更快地受到限制,您的总容量从 DynamoDB 得到的比你付出的要少。然而,他们在几年前用他们所谓的 adaptive capacity 解决了这个问题:DynamoDB 现在会检测您的工作负载 容量何时低于您支付的容量,并增加容量限制单独的分区。

例如,如果您提供 10,000 个 RCU 容量并且 DynamoDB 将您的数据划分为 10 个分区,每个分区开始时 有 1,000 个 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 - 它将始终受限于 3,000 的单个分区限制。

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