DynamoDB и выделенная емкость: регулирование и отказ
Я читал часто задаваемые вопросы и другие сообщения здесь, пытаясь понять поведение DynamoDB в отношении единиц чтения и записи. Скажем, я сканирую таблицу, и это превышает мои возможности чтения. Правильно ли я полагаю, что DynamoDB сначала отрегулирует запрос, по-прежнему возвращая все результаты, только медленнее? В какой момент запрос просто потерпит неудачу, а не будет ограничен?
1 ответ
Если ваш запрос превышает предоставленную емкость, вы получите ProvisionedThroughputExceededException
ошибка.
Документация по обработке ошибок гласит:
Ваш запрос слишком высок. SDK AWS для DynamoDB автоматически повторяют запросы, которые получают это исключение. Ваш запрос в конечном итоге будет успешным, если ваша очередь на повторные попытки не будет слишком большой для завершения. Уменьшите частоту запросов, используя экспоненциальный откат.
Также обратите внимание, что DynamoDB обеспечивает Burst Capacity. Из Руководства по работе с таблицами документации:
DynamoDB обеспечивает некоторую гибкость в обеспечении пропускной способности для каждого раздела. Когда вы не используете в полной мере пропускную способность раздела, DynamoDB сохраняет часть вашей неиспользованной емкости для последующих пакетов пропускной способности. DynamoDB в настоящее время сохраняет до пяти минут (300 секунд) неиспользованной емкости для чтения и записи. Во время периодического всплеска активности чтения или записи эти дополнительные единицы емкости могут потребляться очень быстро - даже быстрее, чем пропускная способность в секунду, указанная для вашей таблицы. Однако не следует разрабатывать свое приложение так, чтобы оно зависело от доступности пакетной емкости в любое время: DynamoDB может и использует пакетную емкость для фонового обслуживания и других задач без предварительного уведомления.
Таким образом, комбинация автоматических повторных попыток плюс пакетная емкость означает, что менее вероятно, что вы получите исключения пропускной способности. Если вы это сделаете, то по экспоненте отступите и повторите попытку.
Некоторые пользователи DynamoDB поддерживают очередь Amazon SQS для временного хранения транзакций. Если пропускная способность превышена, они сохраняют транзакцию в очереди SQS. Затем фоновый процесс извлекает транзакции из очереди и повторяет их позже, когда, как мы надеемся, будет доступна большая пропускная способность.