Как рассчитана и ограничена пропускная способность Amazon DynamoDB?

Является ли оно усредненным в секунду? В минуту? В час?

Например, если я заплачу за 10 "считываемых единиц", что позволяет 10 высокоуровневых чтений в секунду, я буду задушен, если попытаюсь сделать 20 чтений за одну секунду, даже если бы это были только 20 прочитанных что произошло в последний час? Документация Amazon и часто задаваемые вопросы не отвечают на этот критический вопрос где бы я ни находилась.

Единственный связанный ответ, который я мог найти в FAQ, полностью игнорирует вопрос о том, как вычисляется использование и когда может произойти дросселирование:

В: Что произойдет, если мое приложение выполнит больше операций чтения или записи, чем моя резервная емкость?

A: Если ваше приложение выполняет больше чтение/секунда или запись/вторая, чем ваши таблицы, обеспечиваемые пропускной способностью мощности, запросы, превышающие ваши резервные мощности, будут дросселируется, и вы получите 400 кодов ошибок. Например, если вы попросил 1000 единиц мощности записи и попытался сделать 1500 пишет/в секунду из 1 KB элементов, DynamoDB разрешает только 1000 пишет/секунду, чтобы пройти, и вы получите код ошибки 400 на ваши дополнительные запросы. Вы должны использовать CloudWatch для отслеживания вашего запроса чтобы вы всегда имели достаточную обеспеченную пропускную способность для достигните требуемой скорости запроса.

Ответ 1

DynamoDB обеспечивает "Burst Capacity", который позволяет получать всплески в количестве данных, считываемых из таблицы. Вы можете прочитать об этом ниже: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

В основном это то, что заметил @abjennings - он использует окно 5min для среднего числа чтений из таблицы.

Ответ 2

Похоже, что они отслеживают запись в пятиминутном окне и будут дросселировать вас, когда ваше среднее значение за последние пять минут превышает вашу подготовленную пропускную способность.

Я провел некоторое тестирование. Я создал тестовую таблицу с пропускной способностью 1 запись в секунду. Если я не напишу на него какое-то время, а затем отправлю поток запросов, Amazon, похоже, примет около 300, прежде чем начнет дросселирование.

Предостережение, конечно, состоит в том, что это не указано ни в одной официальной документации Amazon и может меняться в любое время.

Ответ 3

Если я заплачу за 10 "единиц чтения", что позволяет 10 очень непротиворечивых читается в секунду, меня задушу, если я попытаюсь сделать 20 прочтений в одна секунда, даже если это были только 20 прочитанных, которые произошли в последний час?

Да, это связано с тем, что сама концепция Amazon DynamoDB является быстрой и предсказуемой производительностью с плавной масштабируемостью - цитируемые часто задаваемые вопросы фактически исправляют это правильно уже (т.е. вы должны брать операции/второй буквально), хотя расчет лучше всего проиллюстрирован в Продвинутой пропускной способности в Amazon DynamoDB:

Единица емкости записи позволяет выполнять одну запись в секунду для элементов размером до 1 КБ. Аналогично, единица Read Capacityпозволяет выполнять одно строго согласованное чтение в секунду (или два в итоге последовательные чтения в секунду) элементов размером до 1 КБ.Большие предметы потребуют большей емкости. Вы можете рассчитать число единиц мощности чтения и записи, которые вам нужны, оценивая количество чтений или записей, которые вы должны выполнять в секунду, и умножения на размер ваших предметов (округленный до ближайшего КБ).

Единицы емкости, необходимые для записи = Количество записей элементов за каждый второй размер элемента x (округленный до ближайшего КБ)

Единицы мощности требуется для чтения * = Количество элементов в секунду, размер элемента (округляется до ближайшего КБ) * Если вы используете в конечном итоге последовательные чтения, вы получите вдвое большую пропускную способность с точки зрения чтения в секунду.

[акцент мой]

Получение этих вычислений для реальных случаев использования в мире потенциально сложно, однако, пожалуйста, проверьте дополнительные подробности, например, например. Руководства по обеспечению пропускной способности в Amazon DynamoDB соответственно.

Ответ 4

От AWS:

В настоящее время DynamoDB сохраняет до пяти минут (300 секунд) неиспользуемой емкости чтения и записи

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

Ответ 5

Мое предположение было бы то, что они не указывают это явно специально. Вероятно, он может измениться/иметь региональные различия/зависит от положения луны и звезд, или освобождение информации будет способствовать злоупотреблениям. Я бы сделал свои расчеты на худшем сценарии.

Ответ 6

Мы устанавливаем для write-limit '10 units/sec для одной из таблиц. График Cloudwatch (см. Изображение) показывает, что мы превысили это на единицу (11 writes/sec). Я предполагаю там небольшую комнату для маневра (<= 10%). Опять же, я просто предполагаю...