提问人:b_a9f 提问时间:9/29/2022 更新时间:9/30/2022 访问量:892
什么决定了 DynamoDB 表中的分区数?
What decides the number of partitions in a DynamoDB table?
问:
我是 DynamoDB 的初学者,我的在线构造函数没有回答他的 Q/A 哈哈,我对此感到困惑。 我知道分区键决定了项目所在的分区。 我还知道分区数是使用著名的公式根据吞吐量或存储计算的
因此,假设一个表的分区键为 user_id,有 200 user_ids。这是否自动意味着我们有 200 个分区?如果是这样,我们为什么不计算编号。基于著名公式的分区? 谢谢
答:
2赞
Charles
9/29/2022
#1
对分区键值进行哈希处理,以确定要将数据项放入的实际分区。
因此,不同分区键值的数量对物理分区的数量没有影响。
影响分区物理数量的唯一因素是 RCU/WCU(吞吐量)和存储的数据量。
- Nbr 部分 Pt = RCU/3000 + WCU/1000
- 丁腈橡胶部分 ps = GB/10
除非上述值之一大于 1.0,否则可能只有一个分区。但我敢肯定,当你接近极限时,就会发生分裂,而具体情况只有AWS知道。
评论
1赞
hunterhacker
9/29/2022
它比这更复杂。
0赞
Charles
9/29/2022
@hunterhacker是的,我过于简单化了。您可以拥有需要多个分区的组合 RCU/WCU。
2赞
NoSQLKnowHow
9/30/2022
#2
让我们确定两件事。
- 一个 DynamoDB 分区可以支持 3000 个读取操作和 1000 个写入操作。它在读取和写入操作之间保持分隔,因此它们不会相互干扰。如果表配置为支持 18000 次读取和 6000 次写入,则至少会有 12 个分区,但可能会有更多分区用于某些空间。
- 默认情况下,预置容量表有 1 个分区,但按需分区默认有 4 个分区。
所以,直接回答你的问题。仅仅因为你有 200 个项目,并不意味着你有 200 个分区。如果表处于预置容量模式,则这 200 个项目很可能只位于一个分区中。如果表的配置发生更改或占用更多流量,则这些项目可能会移动到新分区。
DynamoDB 会在几个不同的时间添加分区。
- 当分区的存储大小增长超过 10GB 时。DynamoDB 可能会发现您正在获取数据并尝试主动执行此操作,但 10GB 是截止条件。
- 当您的表需要支持当前每秒执行的更多操作时。这可能是手动发生的,因为您将表配置为支持 20,000 次读取/秒,而之前我只支持 2000 次读取。DynamoDB 必须添加分区并移动数据才能处理每秒 20000 次读取。或者可以自动添加分区,因为您在 DynamoDB 自动扩展中配置了下限和上限值,并且 DynamoDB 检测到您的操作/秒正在攀升,因此将调整分区数以响应容量异常。
- 您的表处于按需容量模式,DynamoDB 会尝试自动将容量的高水位线保留 2 倍。例如,假设您的表首次达到 10,000 个 RCU。DynamoDB 会发现这已经超过了您之前的高水位线,并开始添加更多分区,因为它会尝试将容量保持在 2 倍的就绪状态,以防您像刚才一样再次达到峰值。
- DynamoDB 正在主动监控您的表,如果它发现一个或多个项目受到特别严重的打击(热键),则它们位于同一分区中,这可能会创建一个热分区。如果发生这种情况,DynamoDB 可能会拆分表以帮助隔离这些项目并防止或修复热分区情况。
还有其他一两个更罕见的边缘情况,但如果您遇到这种情况,您可能会与 AWS Support 交谈。
注意:一旦 DynamoDB 创建了分区,分区的数量就永远不会缩小,这没关系。吞吐量稀释不再是 DynamoDB 中的一回事。
评论