为什么以及DynamoDB如何在扫描操作中消耗超过分配的RCU?

Asa*_*Ali 2 amazon-dynamodb aws-sdk-nodejs

在做一个教程时,我将数据批量加载到我的dynamoDB JobsApplication表中,大约有400个随机作业帖子.

这是表格的样子

使用Node.jsaws-sdk我执行扫描操作.

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": {
      "S": "18"
    },
    ":time": {
      "N": epochNow.toString()
    }
  },
  "ReturnConsumedCapacity": "TOTAL"
};

dynamodb.scan(params).promise()
  .then(print)
  .catch(print);
Run Code Online (Sandbox Code Playgroud)

我的表目前有5个RCU和WCU分配给它.扫描操作在不到2秒的时间内得出结果,除了结果显示此信息:

"Count": 7,
    "ScannedCount": 100,
    "ConsumedCapacity": {
        "TableName": "GMJS.Job",
        "CapacityUnits": 89.5
    }
}
Size of data: 50.8 KB
Run Code Online (Sandbox Code Playgroud)

我关掉了自动缩放功能.那么RCUs当我只给RCUs桌子分配5个时,它是如何在2秒内消耗89.5 的?如果它必须消耗89.5 RCUs它可以RCUs每秒使用5 次,持续17.9秒,然后返回结果,或者它可能表示该表需要更多RCUs用于如此昂贵的扫描操作等.

那么RCUs当我只分配5 RCUs是我的主要问题时,它是如何使用89.5 扫描的.

E.J*_*nan 5

DynamoDB具有一定的突发功能,可在需要时使用:

DynamoDB在每分区吞吐量配置方面提供了一些灵活性.当您未充分利用分区的吞吐量时,DynamoDB会保留一部分未使用的容量,以便以后突发吞吐量使用.DynamoDB目前保留最多五分钟(300秒)的未使用读写容量.在偶尔的读取或写入活动突发期间,这些额外的容量单位可以非常快速地消耗 - 甚至比您为表定义的每秒预配置吞吐量容量更快.但是,不要设计您的应用程序,以便它依赖于始终可用的突发容量:DynamoDB可以并且确实使用突发容量进行后台维护和其他任务,恕不另行通知.

注意

将来,突发容量的这些细节可能会发生变化.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting