DynamoDB Scan操作读容量单位(RCU)消耗不符合预期问题咨询
DynamoDB Scan操作容量消耗超出预期问题解答
- 首先纠正认知误区:你混淆了HTTP响应体大小和DynamoDB读容量计算的读取大小两个概念。DynamoDB计算读容量的依据是服务端存储的被扫描项目的原始总大小,遵循官方定义的项目大小计算规则(属性名长度+属性值长度之和,不同数据类型有对应计算标准),和JSON序列化后的HTTP响应Content-Length没有关联,不能用Content-Length倒推容量消耗。
- 核心原因:Scan操作会扫描表的所有底层存储分区,且每个分区的读容量消耗是单独计算、单独向上取整的,不会将所有分区的读取大小合并后再取整。你参考的官方RCU计算规则是单读请求访问单分区时的计算逻辑,没有覆盖Scan跨多分区访问时的累计规则。
即使你的全表数据总大小远小于4KB,只要你的表当前有4个底层分区,每个分区扫描到的数据量都小于4KB,那么每个分区的最终一致性读都会按最小单位0.5 RCU计算,4个分区累计就是4 * 0.5 = 2.0 RCU,和你观测到的消耗完全匹配。 - 补充说明:DynamoDB的表分区数量由历史最高预置容量、历史最大数据量共同决定,分区数量只会增加不会自动缩减,哪怕你现在表的数据量很小,只要之前曾经有过更高的预置容量或者更大的数据存量,就会保留多个分区,导致小表Scan的容量消耗超出预期。
内容的提问来源于stack exchange,提问作者JavaPupil
相关产品推荐
相关产品推荐

