如何防止DynamoDBMapper中的ProvisionedThroughputExceededException?

时间:2017-01-04 21:09:27

标签: java multithreading amazon-web-services amazon-dynamodb

我有近300个线程试图访问一个具有非常低的分配读/写容量(5 /秒)的DynamoDB表。所以负载显然太高,我从ProvisionedThroughputExceededException得到DynamoDBMapper。问题是:如何让DynamoDBMapper等待+重试而不是失败?

我在ExponentialBackoffStrategy上使用AmazonDynamoDBClient,延迟时间很长(基数为100毫秒,重试次数为12次,因此产生:100毫秒,200毫秒,400毫秒,... 409600毫秒),但它不起作用。事实上,它立即失败了。根据{{​​3}}:

  

ProvisionedThroughputExceededException

     

消息:您超出了允许的最大预配置吞吐量   对于表或一个或多个全局二级索引。查看   预配置吞吐量与消耗的性能指标   吞吐量,打开Amazon CloudWatch控制台。

     

示例:您的请求率过高。适用于DynamoDB的 AWS开发工具包   自动重试接收此异常的请求。你的申请   最终成功,除非你的重试队列太大了   完成的。使用指数退避降低请求频率。

我做错了什么?

“太大而无法完成”是什么意思?

谢谢!

如果您想知道为什么我使用300个线程,分配的容量较低并且可以接受较长的响应时间:通常我们使用更高的容量,如果容量较低,我只是不希望应用程序失败。

1 个答案:

答案 0 :(得分:0)

好的我有一个错误的重试条件。然后,您还需要调整最大重试次数,以及可能的延迟(最大值,基数)。