2

我正在为 DynamoDB 使用batchWriteItem API。

我在 PHP AWS SDK2 之上编写了一个包装器,它可以正常工作。

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

简而言之,batchWriteItem 一次只处理 1 个项目,并在UnprocessedItems.

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

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

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

有谁知道为什么会这样?

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

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

我发现 in 的价值batchWriteItem正在Throttled Requests飙升。

这是否意味着唯一的解决方案是提高写入容量单位以便它可以处理受限制的请求?

4

1 回答 1

1

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

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

于 2013-09-04T21:56:50.563 回答