AWS:DynamoDB中有太多未处理的项目


AWS : Too many UnprocessedItems in DynamoDB

我正在为DynamoDB使用batchWriteItemAPI。

我在PHP AWS SDK2上写了一个包装器,它运行起来没有问题。

我的代码用于将batchWriteItem请求拆分为25个项,还用于重试响应的UnprocessedItems键中的项。现在我正在使用它将一个大型数据库迁移到DynamoDB中,但发生了一些奇怪的事情。。。

简而言之,batchWriteItem一次只处理一个项目,并返回UnprocessedItems中的其余项目

详细地说,这就是正在发生的事情:

  1. 我通过batchWriteItem发送了一个放置25个项目的请求
  2. 所有25个项目都返回UnprocessedItems
  3. 我的重试代码运行,它重新发送25个项目
  4. UnprocessedItems中返回了24个项目
  5. 我的重试代码运行,它重新发送24个项目
  6. UnprocessedItems中返回23个项目
  7. 重复以上操作,直到返回0个项目

我将写入容量单位设置为8,CloudWatch指标的ConsumedWriteCapacityUnits显示它当前的运行速度在1~1.5之间

有人知道为什么会发生这种事吗?

我确认这些项目实际上是被放入数据库中的,但是,如果batchWriteItem所做的只是一个接一个地处理项目,那么它就没有任何意义了。。。

======更新======

我发现Throttled RequestsbatchWriteItem的值正在飙升。

这是否意味着唯一的解决方案是提高写容量单位,以便它能够处理被抑制的请求?

是的,听起来您需要增加写入容量单位。有关吞吐量如何工作的详细信息,您应该在AmazonDynamoDB论坛上提问,并参阅AmazonDynamo DB开发人员指南。

此外,SDK中已经内置了一个batchWriteItem的包装器,称为WriteRequestBatch类。