DynamoDB: когда повышается ProvisionedThroughputExceededException

Я использую AWS Java SDK в задании Apache Spark для заполнения таблицы DynamoDB данными, извлеченными из S3. Spark Job просто записывает данные, используя один PutItemс очень интенсивным потоком (три узла m3.xlarge используются только для записи) и без какой-либо политики повтора.

Документы DynamoDB утверждают, что AWS SDK имеет политику отката, но в конечном итоге, если скорость слишком высока ProvisionedThroughputExceededException может быть поднят. Моя работа с искрой работала в течение трех дней и была ограничена только пропускной способностью DynamoDB (равной 500 единицам), поэтому я ожидаю, что скорость была чрезвычайно высокой, а очередь была очень длинной, однако у меня не было никаких признаков сгенерированных исключений или потерянных данных.

Итак, мой вопрос - когда можно получить исключение при записи в DynamoDB с очень высокой скоростью.

1 ответ

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

Еще одна вещь, которую следует учитывать, - это то, что DynamoDB накапливает неиспользованную пропускную способность и использует ее для увеличения пропускной способности, доступной на короткое время, если вы ненадолго превышаете свой лимит.

Редактировать: DynamoDB теперь имеет новую функцию адаптивной емкости, которая несколько решает проблему горячих разделов, перераспределяя общую пропускную способность неравномерно.

Другие вопросы по тегам