「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
書き込みシャーディングを使用してワークロードを均等に分散させる
Amazon DynamoDB のパーティションキースペースに効率よく書き込みを分散させる方法として、スペースの拡張があります。これにはさまざまな方法があります。パーティションキー値に乱数を追加して、パーティション間で項目を分散させることができます。または、クエリ対象に基づいて計算された数値を使用することができます。
ランダムなサフィックスを使用したシャーディング
パーティションキースペース全体に均等に負荷を分散するための戦略として、パーティションキー値の最後に乱数を追加する方法があります。次に、より大きなスペース全体の書き込みをランダム化します。
たとえば、今日の日付を表すパーティションキーの場合は、1
と 200
の間の乱数を選択し、それをサフィックスとして日付に連結することができます。これにより、2014-07-09.1
、2014-07-09.2
などのパーティションキー値が生成されます。この場合、2014-07-09.200
になります。 パーティションキーをランダム化しているため、毎日のテーブルへの書き込みは複数のパーティション間で均等に分散されます。これにより、並列性が強化され、全体的なスループットが向上します。
ただし、特定の日のすべての項目を読み込むには、すべてのサフィックスの項目をクエリしてから結果をマージする必要があります。たとえば、最初にパーティションキー値 Query
に対して 2014-07-09.1
リクエストを発行します。 次に Query
に別の 2014-07-09.2
を発行します。この処理を 2014-07-09.200
まで繰り返します。 最終的には、アプリケーションですべての Query
リクエストの結果をマージする必要があります。
計算されたサフィックスを使用したシャーディング
ランダム化戦略は、書き込みスループットを大幅に向上させることができます。ただし、項目を書き込むときに使用されたサフィックスの値がわからないため、特定の項目を読み込むのは困難です。個々の項目を読みやすくするには、別の戦略を使用します。パーティション間で項目を分散させるには、乱数を使用せずに、クエリする項目に基づいて計算できる数値を使用します。
前の例では、パーティションキーで今日の日付が使用されています。各項目にはアクセス可能な OrderId
属性があり、日付だけでなく、注文 ID を使用して、項目を最も頻繁に見つける必要があるとします。アプリケーションから項目をテーブルに書き込む前に、この注文 ID
に基づいてハッシュサフィックスを計算し、その値をパーティションキーの日付に追加します。この計算では、1 から 200 までの数値が生成され、ランダムな戦略と同様に、完全に均一に分散されます。
この計算はシンプルな計算で十分です (注文 ID の文字の UTF-8 コードポイント値を乗算して、それを 200で割った余りに + 1 するなど)。パーティションキー値は、日付に計算結果を連結した値になります。
この方法を使用すると、書き込みがパーティションキー値全体に均一に分散されます。したがって、物理パーティション全体にも均一に分散されます。これで、特定の GetItem
値のパーティションキー値を計算できるため、OrderId
オペレーションを実行して、特定の項目や日付を簡単に読み込むことができます。
特定の日のすべての項目を読み込むには、Query
キー (2014-07-09.N
が 1N
200) のそれぞれを – する必要があり、その場合、アプリケーションはすべての結果をマージする必要があります。この方法には、すべてのワークロードを利用する単一の「ホット」パーティションキー値を使用しないというメリットがあります。
大容量の時系列データを処理するために特別に設計されている効率的な戦略については、「時系列データ」を参照してください。