Почему и как DynamoDB позволяет потреблять больше, чем выделено RCU в операции сканирования?

Во время обучения я загрузил данные в свою таблицу DynamoDB JobsApplication примерно с 400 сообщениями о случайных вакансиях.

Вот как выглядит таблица

Используя Node.js и aws-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);

В настоящее время моей таблице назначено 5 RCU и WCU. Операция сканирования дала результат менее чем за 2 секунды и помимо результатов показала следующую информацию:

"Count": 7,
    "ScannedCount": 100,
    "ConsumedCapacity": {
        "TableName": "GMJS.Job",
        "CapacityUnits": 89.5
    }
}
Size of data: 50.8 KB

Я отключил автомасштабирование. Так как же он израсходовал 89,5 RCUs за 2 секунды, когда я выделил таблице только 5 RCUs? Если бы ему нужно было потреблять 89,5 RCUs, он мог бы использовать 5 RCUs в секунду в течение 17,9 секунд, а затем вернуть результат, или он мог бы сказать, что таблице требуется больше RCUs для такой дорогостоящей операции сканирования и т. д.

Итак, как он использовал 89,5 RCUs для сканирования, когда я выделил только 5 RCUs, это мой главный вопрос.


person Asad Feroz Ali    schedule 29.03.2018    source источник


Ответы (1)


DynamoDB имеет определенные возможности пакетной обработки, которые можно использовать при необходимости:

DynamoDB обеспечивает некоторую гибкость в обеспечении пропускной способности для каждого раздела. Когда пропускная способность раздела используется не полностью, DynamoDB сохраняет часть неиспользуемой емкости для последующих всплесков использования пропускной способности. В настоящее время DynamoDB сохраняет до пяти минут (300 секунд) неиспользованной емкости для чтения и записи. Во время периодического всплеска операций чтения или записи эти дополнительные единицы емкости могут расходоваться очень быстро — даже быстрее, чем выделенная пропускная способность в секунду, которую вы определили для своей таблицы. Однако не создавайте свое приложение таким образом, чтобы оно зависело от постоянной доступности пиковой емкости: DynamoDB может и использует пиковую емкость для фонового обслуживания и других задач без предварительного уведомления.

Примечание

В будущем данные о пропускной способности могут измениться.

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

person E.J. Brennan    schedule 29.03.2018
comment
Я думаю, что мы действительно хотим знать, что если автоматическое масштабирование отключено, и вы превысите всплеск. Начнет ли DynamoDB выдавать ошибку? - person CodeGuru; 21.06.2019