2016-04-17 13 views
5

私は5リードと5ライト能力のダイナモテーブルを持っています。この表には2つのレコードがありました。DynamoDBスロットル

次に、多数の書き込みを一度に(1つのバーストで約4000個の記録を)プッシュすることによってどのようなエラー応答が得られるかを知ることにしました。青色の '消費された'ラインは、赤色の '容量'ラインにまっすぐに撃たれましたが、私はどんな種類のエラーメッセージも受け取りませんでした。

メトリックには調整が行われていますが、読み込みが行われていて、両方の容量レベルを超えると書き込みが発生します。

私は30分以上読み込みをしていて、容量を上回り、エラーはまだ発生していません。

ノードjsの正式なjavascript SDKを使用している可能性がありますか?わからないのは、透過的にスロットリングを処理してスロットルされたクエリを再試行することでしょうか?

私は誰かに私にこれに関するいくつかのガイダンスを与えることを望んでいます。

ありがとう

答えて

1

これはバースト容量のためです。詳細については、AWSのドキュメント:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

基本的には、最大300秒分の「記憶容量」を持つことができ、スパイクが負荷されているときにプールとして使用できます。あなたの場合、それは即座に使用できる1500リクエストのプールになり、容量が使用されていないときに再び補充されます。

2

はちょうどあなたが「バースト能力」の外にあるとDynamoDBのは、スロットリングを開始した後でも、あなたは(私の経験ごとに)比較的めったにProvisionedThroughputExceededExceptionを得ないだろう@Luc Hendriks

によって解答に絞るに関する通知を追加したいです。これは、SDKが自動的に調整された要求を再試行するためです(SDKが透過的にスロットルを処理していたためです)。

maxRetriesパラメータを使用すると、自動再試行を無効にすることができます。これにより、メトリックの調整が表示された直後にProvisionedThroughputExceededExceptionが発生します。ここで

は自動リトライせずに更新要求を実行する方法の例です:

var aws_dynamodb = new aws.DynamoDB({maxRetries: 0}), 
    aws_dynamodb_doc = new aws.DynamoDB.DocumentClient({service: aws_dynamodb}); 

// ... 
aws_dynamodb_doc.update(params, function(err, data) { 
    // ... 
}); 
+0

感謝。私が気づいている奇妙なものは、クエリ自体からの 'returnConsumerCapacity'の数字です。私は約10,000レコードのテーブルを照会すると255を示しますが、dynamodbメトリックでは、消費された容量は4.25にすぎません。本当にこれに困惑! – user1873468

+0

10,000個のアイテムをクエリするのにどれくらい時間がかかりますか? 4.25は、ある程度の時間(1分または5分)にわたる平均値である可能性があります。 –

+0

はい、コンソールに記載されているように、メトリックグラフには、1分間に消費された容量単位が平均して1分間に表示されます。したがって、255単位を消費する1つのクエリを作成し、その特定の時間に他のクエリを実行していない場合、チャートは255/60 = 4.25 /秒 – xtx

関連する問題