2017-02-11 2 views
1

Я читал часто задаваемые вопросы и другие сообщения, пытаясь понять поведение DynamoDB по отношению к единицам чтения и записи. Скажем, я просматриваю таблицу, и это превышает мои единицы измерения чтения. Правильно ли я полагаю, что DynamoDB сначала запустит запрос, все еще вернув все результаты, только медленнее? В какой момент запрос просто провалится, вместо того, чтобы задушить?DynamoDB & Provisioned Capacity: Throttling vs. Failure

ответ

2

Если ваш запрос превышает требуемую емкость, вы получите сообщение об ошибке ProvisionedThroughputExceededException.

The Error Handling documentation говорит:

Ваша оценка запроса слишком высока. SDK AWS для DynamoDB автоматически запрашивает запросы, которые получают это исключение. Ваш запрос в конечном счете будет успешным, если ваша очередь повторения слишком велика для завершения. Уменьшите частоту запросов, используя экспоненциальное отключение.

Кроме того, обратите внимание, что DynamoDB обеспечивает серийной съемки Емкость. Из Guidelines for Working with Tables документации:

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

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

Некоторые пользователи DynamoDB поддерживают очередность SQS Amazon для временного хранения транзакций. Если пропускная способность превышена, они сохраняют транзакцию в очереди SQS. Затем фоновый процесс извлекает транзакции из очереди и повторяет их позже, когда, надеюсь, будет доступна большая пропускная способность.

+0

Спасибо, Джон! Имеет смысл, поскольку я использую SDK iOS. – sambol