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 個のアイテムが返されるまで上記を繰り返します。

Write Capacity Units を8に設定するとConsumedWriteCapacityUnits、CloudWatch メトリクスは、現在 1 ~ 1.5 の間で実行されていることを示しています。

なぜこれが起こっているのか誰にも分かりますか?

実際にアイテムがDBに投入されていることは確認していますが、やはりbatchWriteItemはアイテムを1つずつ処理するだけでは意味がありません...

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

batchWriteIteminの値Throttled Requestsが急上昇していることがわかりました。

これは、スロットルされたリクエストを処理できるように書き込みキャパシティーユニットをブーストすることが唯一の解決策であることを意味しますか?

4

1 に答える 1

1

はい、書き込み容量ユニットを増やす必要があるようです。スループットの仕組みの詳細については、 Amazon DynamoDB フォーラムで質問するか、 Amazon DynamoDB 開発者ガイドを参照してください。

また、 WriteRequestBatch クラスbatchWriteItemと呼ばれる SDK に組み込まれたラッパーが既に存在します。

于 2013-09-04T21:56:50.563 に答える