我正在为 DynamoDB 使用batchWriteItem API。
我在 PHP AWS SDK2 之上编写了一个包装器,它可以正常工作。
我有用于将 batchWriteItem 请求拆分为 25 个项目的代码,以及用于重试UnprocessedItems
响应键中的项目的代码。现在我正在使用它来将一个大型数据库迁移到 DynamoDB,但是发生了一些奇怪的事情......
简而言之,batchWriteItem 一次只处理 1 个项目,并在UnprocessedItems
.
详细地说,这就是正在发生的事情:
- 我通过 发送请求放置 25 件物品
batchWriteItem
。 - 所有 25 个项目都回来了
UnprocessedItems
。 - 我的重试代码运行,它重新发送 25 个项目。
- 24 个项目回来了
UnprocessedItems
。 - 我的重试代码运行,它重新发送 24 个项目。
- 23 个项目回来了
UnprocessedItems
。 - 重复上述操作,直到返回 0 个项目。
我将写入容量单位设置为8,ConsumedWriteCapacityUnits
我的 CloudWatch 指标显示它当前运行在 1 ~ 1.5 之间。
有谁知道为什么会这样?
我正在确认这些项目实际上正在被放入数据库中,但是,如果它所做的只是一个接一个地处理项目,那么 batchWriteItem 确实没有任何意义......
====== 更新 ======
我发现 in 的价值batchWriteItem
正在Throttled Requests
飙升。
这是否意味着唯一的解决方案是提高写入容量单位以便它可以处理受限制的请求?