0

次の操作を実行する python スクリプトがあります。テキスト ファイルを 1 行ずつ読み取ります。各行に関する情報は、DynamoDDB テーブルに記録する必要があります。取り込まれた各行を処理し、次のように 1 つの書き込みを実行します。

with open(fPath, 'r') as f:
   for line in f:
      # process line, extract data to be written into DDB into item_data
      # also extract key
      item = table.new_item(hash_key=key_from_line,attrs=item_data)
      item.put()

実効スループット、つまり 1 秒あたりの書き込み回数 (平均) が、AWS DDB コンソールでテーブルに設定した最大スループットよりもはるかに低いことに気付きました。現在、ライン処理段階で大きな非効率性が存在する可能性があります。しかし、別の方法でテーブルに書き込むことでスピードアップできるかどうか疑問に思っています。たとえば、アイテムの配列を収集してから、それらを一度にすべて書き込むことは理にかなっていますか? もしそうなら、配列の最適なサイズを決定する方法はありますか? 書き込みを高速化する他の簡単な (そしておそらくそれほど単純ではない方法) はありますか?

4

1 に答える 1

0

最大スループットが得られない理由は、「ホットゾーン」を作成しているためです。つまり、テーブルの同じパーティションへの呼び出しが多すぎます。

最速の修正は、キーが同じプレフィックスを持っている可能性があるため、キーを逆にするかハッシュすることです。

プロビジョニングされたスループットは、主キーの選択と個々のアイテムのワークロードパターンによって異なります。Amazon DynamoDBは、データを保存するときに、テーブルのアイテムを複数のパーティションに分割し、主にハッシュキー要素に基づいてデータを分散します。テーブルに関連付けられたプロビジョニングされたスループットもパーティション間で均等に分割され、パーティション間でプロビジョニングされたスループットが共有されることはありません。

プロビジョニングされたスループット/パーティションの合計=パーティションあたりのスループット。

したがって、テーブルにプロビジョニングした要求スループットの全量を達成するには、ワークロードをハッシュキー値全体に均等に分散させてください。ハッシュキー値全体にリクエストを分散すると、パーティション全体にリクエストが分散されます。

詳細については、http: //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.DataUploadをご覧ください。

于 2013-01-29T15:04:12.317 に答える