パーティションキーを設計してワークロードを均等に分散する - Amazon DynamoDB

パーティションキーを設計してワークロードを均等に分散する

テーブルの主キーのパーティションキー部分は、テーブルのデータが格納されている論理パーティションを決定します。これにより、基本的な物理パーティションに影響を及ぼします。テーブルのプロビジョニングされた I/O 容量は、これらの物理パーティション間で均等に分割されます。そのため、I/O リクエストを均等に分散しないパーティションキー設計では、「ホット」パーティションが作成される場合があります。これにより、スロットリングが発生することや、プロビジョニングされた I/O 容量を効率的に使用されないことがあります。

テーブルのプロビジョニングされたスループットの最適な使用は、個々の項目のワークロードパターンだけでなく、パーティションキー設計にも左右されます。この操作によって、スループットレベルを達成するためにすべてのパーティションキーバリューにアクセスしたり、アクセスされるパーティションキーバリューの割合を高くしたりする必要があるわけではありません。これは、ワークロードがアクセスするパーティションキーバリューが大きくなるほど、リクエストが分割された空間に分散されることを意味します。一般的に、パーティションキーバリューの合計数に対する、アクセスされたパーティションキーバリューの割合が大きくなるにつれて、プロビジョニングされたスループットをより効率的に使用することができます。

一般的なパーティションキースキーマのプロビジョニングされたスループット効率の比較を次に示します。

パーティションキーバリュー 均一性

ユーザー ID (アプリケーションに多くのユーザーが存在する場合)

良好

ステータスコード (可能性のあるステータスコードが少しだけある場合) 不良
項目の作成日。直近の期間 (日、時、分など) に切り上げられます。 不良
デバイス ID (各デバイスが比較的類似した間隔でデータにアクセスする場合)。 良好
デバイス ID (追跡中のデバイスが多数あり、そのうちの 1 つのデバイスが他のすべてのデバイスよりも頻繁に使用される場合) 不良

単一のテーブル内にあるパーティションキーバリューの数が少ない場合は、より明確に区別できるパーティションキーバリュー全体を対象として、書き込みオペレーションを分散することを検討してください。つまり、「ホット」パーティションキーバリュー (何度もリクエストされるパーティションキーバリュー) が原因で全体のパフォーマンス速度が低下する場合があるので、このようなパーティションキーバリューを回避するようにプライマリキー要素を構築してください。

例えば、複合プライマリキーを持つテーブルがあるとします。パーティションキーは項目の作成日を表します (直近の日付に切り上げられます)。ソートキーは項目の識別子を表します。特定の日付 (2014-07-09 など) で、すべての新しい項目が 1 つのパーティションキーバリュー (およびその物理パーティション) として書き込まれます。

テーブル全体が単一のパーティションに収まり (時間の経過に伴うデータの増加を考慮)、アプリケーションで必要となる読み込みスループットと書き込みスループットが単一のパーティションにおける読み込みと書き込みの容量を超過しない場合は、パーティション分割をしても、アプリケーションが予想外のスロットリングを受けることはありません。

ただし、テーブル全体が単一のパーティションには収まらないことが予想される場合は、テーブルの完全にプロビジョニングされたスループットをより多く使用できるように、アプリケーションを設計する必要があります。