我正在为DynamoDB使用batchWriteItemAPI。
我在PHP AWS SDK2上写了一个包装器,它运行起来没有问题。
我的代码用于将batchWriteItem请求拆分为25个项,还用于重试响应的UnprocessedItems
键中的项。现在我正在使用它将一个大型数据库迁移到DynamoDB中,但发生了一些奇怪的事情。。。
简而言之,batchWriteItem一次只处理一个项目,并返回UnprocessedItems
中的其余项目
详细地说,这就是正在发生的事情:
- 我通过
batchWriteItem
发送了一个放置25个项目的请求 - 所有25个项目都返回
UnprocessedItems
- 我的重试代码运行,它重新发送25个项目
UnprocessedItems
中返回了24个项目- 我的重试代码运行,它重新发送24个项目
UnprocessedItems
中返回23个项目- 重复以上操作,直到返回0个项目
我将写入容量单位设置为8,CloudWatch指标的ConsumedWriteCapacityUnits
显示它当前的运行速度在1~1.5之间
有人知道为什么会发生这种事吗?
我确认这些项目实际上是被放入数据库中的,但是,如果batchWriteItem所做的只是一个接一个地处理项目,那么它就没有任何意义了。。。
======更新======
我发现Throttled Requests
中batchWriteItem
的值正在飙升。
这是否意味着唯一的解决方案是提高写容量单位,以便它能够处理被抑制的请求?
是的,听起来您需要增加写入容量单位。有关吞吐量如何工作的详细信息,您应该在AmazonDynamoDB论坛上提问,并参阅AmazonDynamo DB开发人员指南。
此外,SDK中已经内置了一个batchWriteItem
的包装器,称为WriteRequestBatch类。