每次查询消耗多少DynamoDB读写容量?是否有对应API可查询?
有的,DynamoDB 所有读写操作的原生 API 都直接支持返回实际消耗的容量数值,不需要额外调用独立 API。
配置方法
你只需要在发起读写请求时,给请求参数加上 ReturnConsumedCapacity 字段,设置为你需要的返回粒度即可,该参数可选值如下:
TOTAL:仅返回本次操作消耗的总容量数值INDEXES:返回基表+所有涉及的二级索引的容量消耗明细NONE:不返回容量信息(默认值,未配置时不会返回对应字段)
支持的操作范围
所有读写类操作均支持该参数,常见的包括:
- 单条目操作:
GetItem、PutItem、UpdateItem、DeleteItem - 批量操作:
BatchGetItem、BatchWriteItem - 查询扫描操作:
Query、Scan - 事务操作:
TransactGetItems、TransactWriteItems
返回字段说明
开启参数后,响应体的 ConsumedCapacity 结构体就会包含容量消耗数据,核心字段如下:
CapacityUnits:总消耗容量单位,读操作对应读容量单位、写操作对应写容量单位ReadCapacityUnits:单独统计的读容量消耗WriteCapacityUnits:单独统计的写容量消耗- 选择
INDEXES粒度时,还会返回GlobalSecondaryIndexes、LocalSecondaryIndexes字段,分别列出每个索引的单独消耗
返回的数值已经自动兼容了读写一致性级别、条目大小、索引占用所有影响容量计算的因素,和官方计费统计的数值完全一致,不需要你再做额外换算。
调用示例(Python boto3 为例)
import boto3 from boto3.dynamodb.conditions import Key dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('你的表名') # 发起Query请求时开启容量返回 resp = table.query( KeyConditionExpression=Key('分区键').eq('你的键值'), ReturnConsumedCapacity='TOTAL' ) # 直接读取实际消耗的读容量 print("本次查询实际消耗读容量:", resp['ConsumedCapacity']['ReadCapacityUnits'])
内容的提问来源于stack exchange,提问作者mcan
相关产品推荐
相关产品推荐

