DynamoDB 用のbatchWriteItem API を使用しています。
PHP AWS SDK2 の上にラッパーを書きましたが、問題なく動作しています。
batchWriteItem リクエストを 25 項目に分割しUnprocessedItems
、応答のキーで項目を再試行するためのコードがあります。現在、これを使用して大規模なデータベースを DynamoDB に移行していますが、奇妙なことが起こっています...
要するに、batchWriteItem は一度に 1 つのアイテムのみを処理し、残りを に返しUnprocessedItems
ます。
詳細には、これが起こっていることです:
- 経由で 25 個のアイテムを入れるリクエストを送信します
batchWriteItem
。 - 全 25 アイテムが に戻ってきます
UnprocessedItems
。 - 再試行コードが実行され、25 個のアイテムが再送信されます。
- 24 アイテムが に戻ってきます
UnprocessedItems
。 - 再試行コードが実行され、24 個のアイテムが再送信されます。
- 23 アイテムが に戻ってきます
UnprocessedItems
。 - 0 個のアイテムが返されるまで上記を繰り返します。
Write Capacity Units を8に設定するとConsumedWriteCapacityUnits
、CloudWatch メトリクスは、現在 1 ~ 1.5 の間で実行されていることを示しています。
なぜこれが起こっているのか誰にも分かりますか?
実際にアイテムがDBに投入されていることは確認していますが、やはりbatchWriteItemはアイテムを1つずつ処理するだけでは意味がありません...
====== 更新 ======
batchWriteItem
inの値Throttled Requests
が急上昇していることがわかりました。
これは、スロットルされたリクエストを処理できるように書き込みキャパシティーユニットをブーストすることが唯一の解決策であることを意味しますか?