容量模式
On-Demand vs Provisioned、RCU/WCU。
25 分钟
容量模式
DynamoDB 按 读写容量单位(RCU/WCU) 或 On-Demand 请求数 计费。选对模式直接影响成本与是否需要容量规划。
学习目标
- 理解 RCU/WCU 计量方式
- 对比 On-Demand 与 Provisioned(含 Auto Scaling)
- 结合 aws-essentials 成本意识做实验选型
核心内容
容量单位
| 单位 | 定义(简化) |
|---|---|
| 1 RCU | 每秒 1 次强一致读,Item ≤ 4 KB |
| 1 WCU | 每秒 1 次写,Item ≤ 1 KB |
| 超出 | 节流 ProvisionedThroughputExceededException |
大 Item 按 4 KB/1 KB 块向上取整计费。
On-Demand vs Provisioned
| On-Demand | Provisioned + Auto Scaling | |
|---|---|---|
| 计费 | 按实际请求 | 预购 RCU/WCU |
| 适用 | 流量不可预测、实验 | 稳定可预测负载 |
| 运维 | 零容量规划 | 需设 min/max/target |
| 成本 | 单价高、无闲置 | 可更省(稳态) |
# 切换为 On-Demand(实验推荐)
aws dynamodb update-table \
--table-name UserProgress \
--billing-mode PAY_PER_REQUEST
CodeRoadMap 实验表建议 On-Demand,避免忘记删表产生 Provisioned 闲置费。
优化读写成本
- Query 代替 Scan:Scan 读全表分区
- 投影 GSI:INCLUDE 减少返回体积
- 批量:
BatchGetItem/BatchWriteItem(最多 25 项) - Eventually Consistent Read:耗 RCU 减半(默认)
// 批量写入
BatchWriteItemRequest batch = BatchWriteItemRequest.builder()
.requestItems(Map.of("UserProgress", List.of(
WriteRequest.builder().putRequest(PutRequest.builder()
.item(item1).build()).build(),
WriteRequest.builder().putRequest(PutRequest.builder()
.item(item2).build()).build()
)))
.build();
对照 MySQL:RDS 按实例规格计费,与查询模式弱相关;DynamoDB 访问模式即账单。
练习
- 在控制台查看 UserProgress consumed RCU/WCU 指标