You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB扫描操作为何及如何允许超出分配的RCU?

DynamoDB扫描操作为何及如何消耗超出分配的RCU?

我来帮你拆解这个问题,从扫描的特性到DynamoDB的吞吐量机制一步步说清楚:

为什么扫描会超出分配的RCU?

  • 扫描的批量读取本质:扫描操作默认会遍历表中所有符合过滤条件的项目(哪怕加了FilterExpression,也是先读取数据再过滤)。DynamoDB的RCU是按读取数据量计算的——1个RCU对应4KB的强一致读取,或者8KB的最终一致读取(扫描默认用最终一致)。如果你的表总数据量(或单次扫描需读取的数据块)对应的RCU超过了表的基准RCU,自然就会出现“超出”情况。比如你导入的400条职位信息,若每条平均10KB,单次扫描就要消耗 (400*10)/8 = 500 个RCU,要是基准RCU低于这个值,肯定会超。
  • 突发信用额度的支持:如果你的表是预置模式,DynamoDB会积累“突发信用”——当你平时使用的吞吐量低于基准RCU时,未使用的部分会被存起来,最多能积累到基准RCU的2倍。执行扫描这类高负载操作时,就可以动用这些信用,短时间内突破基准RCU限制。
  • 按需模式的弹性扩容:要是表用的是按需模式,DynamoDB会自动根据请求量弹性调整吞吐量上限(最高可达预置模式的数十倍),扫描会直接使用所需的吞吐量,自然可能远超预置模式的固定RCU值。
  • 未做吞吐量限制的扫描:默认情况下,扫描不会主动限制自身的吞吐量使用。如果没加Limit参数分页,也没拆分扫描任务,一次性读取大量数据,瞬间就会消耗大量RCU。

DynamoDB是如何允许这种超出情况发生的?

  • 预置模式的突发机制:预置模式的表会积累突发信用,当需要高吞吐量时,DynamoDB会优先扣除这些信用,而非直接拒绝请求。只有当信用耗尽,且请求量持续超过基准RCU时,才会触发ProvisionedThroughputExceededException限流。
  • 按需模式的无预置限制:按需模式不需要预先设置RCU,DynamoDB会自动处理吞吐量扩容,只要账号没达到区域级别的吞吐量配额,扫描就能按需使用足够的吞吐量。
  • 扫描默认不强制限流:DynamoDB默认不会对扫描操作做强制吞吐量限制(除非手动配置),它会尽可能高效完成扫描请求,这就导致在有可用容量(突发信用或按需扩容空间)的情况下,扫描可以消耗超出基准RCU的资源。

控制RCU消耗的实用建议

  • 用Limit参数分页扫描:每次只读取少量数据,结合返回的LastEvaluatedKey分多次完成扫描,避免一次性消耗大量RCU。
  • 保持最终一致读取:扫描默认就是最终一致,别改成强一致,这样每个RCU能读8KB,比强一致省一倍的RCU。
  • 拆分并行扫描:对于大表,设置TotalSegments和Segment参数,把扫描任务拆分成多个分段,用多线程/进程同时扫描,分摊吞吐量压力。
  • 监控突发信用:如果是预置模式,通过CloudWatch监控BurstCapacityRemaining指标,避免信用耗尽后被限流。

附上补全后的扫描代码片段(添加了RCU消耗查看逻辑):

var AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
var print = require('./../lib/helpers').printPretty;
var dynamodb = new AWS.DynamoDB();
var epochNow = 1506043477;

var params = {
  "TableName": "GMJS.Job",
  "FilterExpression": "CountryId = :country AND ClosingTime > :time",
  "ExpressionAttributeValues": {
    ":country": { N: "1" }, // 示例值,根据实际数据类型调整
    ":time": { N: epochNow.toString() }
  },
  "ReturnConsumedCapacity": "TOTAL" // 开启后可查看实际消耗的RCU
};

dynamodb.scan(params, function(err, data) {
  if (err) print(err);
  else {
    print(data);
    console.log("本次扫描消耗的RCU:", data.ConsumedCapacity.CapacityUnits);
  }
});

内容的提问来源于stack exchange,提问作者Asad Feroz Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:55:06