DynamoDB使用Limit进行Query查询是否消耗读容量?Limit=1如何计费?
关于该DynamoDB Query操作的读容量问题解答
先修正你的查询逻辑
你当前的参数配置默认拿不到最新更新记录:
DynamoDB Query操作默认ScanIndexForward = true,即按SortKey升序排列,此时你设置TimeUpdated < UtcNow+Limit=1,返回的是同一个PartitionKey下最早更新的记录。要获取最新更新记录,需要把ScanIndexForward设为false开启降序排序,第一条匹配的记录就是时间最新的。
读容量统计规则
- DynamoDB的Query读容量不按最终返回的条目数直接统计,而是按查询过程中实际扫描的所有条目总大小计算,最终向上取整到4KB的倍数:强一致性读每1单位容量对应4KB数据,最终一致性读每0.5单位容量对应4KB数据。
- 你这个场景下,只要
TimeUpdated < UtcNow是写在KeyConditionExpression中(而非FilterExpression),同时配置了正确的降序排序+Limit=1,DynamoDB会按SortKey的有序存储结构直接定位到第一条匹配记录就终止扫描,实际仅扫描1条记录,读容量按这1条记录的大小计算:- 若单条记录大小≤4KB,强一致性读仅消耗1单位读容量,最终一致性读仅消耗0.5单位
- 若单条记录大小>4KB,按「实际大小/4KB」向上取整得到最终容量消耗
- 特殊情况提醒:如果你把
TimeUpdated < UtcNow放在FilterExpression里,DynamoDB会先扫描该Partition下所有匹配PartitionKey的记录,过滤后再返回1条,此时容量按所有扫描过的记录总大小计算,消耗会大幅提升。
内容的提问来源于stack exchange,提问作者kewur
相关产品推荐
相关产品推荐

