如何在限制时重试DynamoDb写入?

时间:2017-03-24 19:56:53

标签: scala amazon-web-services amazon-dynamodb

我正在尝试使用AmazonDynamoDBAsyncClient向发电机写入大量数据,我试图了解处理限制的最佳做法是什么?

例如,我有3000个写入的容量,在给定的时刻,我有,我想说,我想写的100,000条记录。我并不是立即需要它们,但我想知道让它们进入的最佳方式是什么。

此应用程序在分布式环境中运行,因此可能有5个执行程序同时尝试执行此操作。以这种方式解决这个问题的最佳方法是什么?在我睡觉的地方写作过程应该我们打油门?或者我应该做些什么来完全避免油门。事实上,我的代码是否按照我的想法进行,即等待一秒后重试数据?

try{
   amazonDynamoAsyncDb.updateItemAsync(updateRequest)
   }catch{
     case e: ThrottlingException => {
        Thread.sleep(1000)
        //retry here, but how?
        }
   }

1 个答案:

答案 0 :(得分:0)

AWS SDK for Java默认情况下将重试限制请求10次,然后再抛出ProvisionedThroughputExceededException。如果您的项目很小(1KB或更少),并且您在与表格相同的区域中执行EC2的写入,则可以假设每次写入大约需要10 ms。这意味着每个处理线程每秒可以执行大约100次写入。要将写入扩展到每秒3000次写入,您需要30个线程和30个HTTP连接。每秒3000小(1kb)写入转换为每秒2.92 MB的数据吞吐量。因此,对于此写入负载,EC2硬件似乎不会成为瓶颈。我建议您进行一些测量,以确定平均编写每个项目所需的时间,并适当地扩展线程和HTTP连接。