2017-09-27 13 views
0

ラムダ関数を書き始めたばかりですが、私の問題はこれです: 私は約7000項目の書き込みがあります。 これらのアイテムには、プライマリIDとセカンダリSPOTNAMEの2つのインデックスがあります。一括書き込みでDynamoDBの中のすべてのこれらの機能を書き込むに 私はこのコードを書いた: は、残念ながら、私はbatchwriteの問題に直面している(25の項目が制限)と私は、次の方法でそれを解決:今すぐDynamoDb:低容量で何千もの項目を書き込む

for (var j = 0; j < event.length; j++){ 
     if(event[j][0] && event[j][1] && event[j][2] && event[j][3]){ 
      requests.push(new Station(event[j][0],event[j][1],event[j][2],event[j][3])); 
      if(requests.length == 25 || j == (event.length -1)) { // when you have 25 ready.. 
       var params = { 
        RequestItems: { 
         'Stations': requests 
         } 
       }; 
       requests=[]; 
       DynamoDB.batchWrite(params, function(err, data) { 
        if (err){ 
         console.log("Error while batchWrite into dynamoDb"); 
         console.log(err); 
        } 
        else{ 
         console.log("Pushed all the added elements"); 
        } 
       }); 
      } 
     } 
    } 

、 表読む:5書き込み:5 spotname-指数読む:5書き込み:5

私は、データベース内のみ1500レコードを書き込むために管理私は、低容量であることに気づきました。 アドバイスはありますか?

答えて

1

私はこの問題を抱えていましたが、これが私が解決した方法です。

短期間は容量を増やしてください。それは時間で学んだ。容量を増やす場合は、1時間以内に使用してください。それからそれを落とす。

あなたは今のところ4倍以上引き落とすことはできません。だから1日に4回、あなたの能力を落とします。書き込み容量を何度でも増やすことができます。

第2のアプローチは、あなたの能力に均等にあなたの書き込みを広げるようにするには、ダイナモへの書き込みの速度を制御することができ、

です。

書き込み容量が常に平均受信記録容量より高いことを確認してください。

希望します。

0

DynamoDBのバッチ書込みAPIを使用しても、実際にはスループットはそれほど低下しません。 DynamoDBに大量の要求を送信するときに、HTTP要求のオーバーヘッド量を削減することを実際に行います。ただし、これは、書き込もうとしたアイテムの1つまたは複数が失敗する可能性があり、これを検出してその要求を再試行することはあなたの責任であることを意味します。これにより、レコードの一部がデータベースに格納されていない可能性があります。この問題を解決するには、バッチ書込みに対する応答を見て、それらの書込みを自分でやり直すべきです。

一方、一度に1つのレコードを配置すると、AWS SDKは自動的に再試行します。上記の場合のように単一のスレッドを使用していて、要求が確実に抑制されている間にバッチを使用しないように切り替えると、再試行して成功する時間が与えられ、テーブルのスループットを低く保ちながら実行が遅くなります。

より良いオプションは、テーブルの書き込みスループットをバルクロードをサポートするのに十分な高い値に一時的に上げることです。この例では、50と100の書き込みの値をお勧めします。単一スレッドのロード操作は、DynamoDB APIへのラウンドトリップ時間によってこれらの数値よりかなり低いレートで制限される可能性があります。 7000アイテムしか読み込めない場合は、バッチ書き込みAPIを避けることをお勧めします。リトライロジックを自分で実装する必要があるからです。しかし、より多くのデータをロードする場合、またはロード時間を短縮したい場合は、バッチAPIを使用して、HTTPオーバーヘッドのパフォーマンスを25倍に向上させることができます。

関連する問題