Take Advantage of Sparse Indexes - Amazon DynamoDB

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

Take Advantage of Sparse Indexes

テーブル内の任意のアイテムについて、 DynamoDB は、対応するインデックス エントリーを書き込みます。 only if the index sort key value is present in the item。 並べ替えキーがすべてのテーブル項目に表示されない場合、インデックスは sparse.

スパースなインデックスは、テーブルの小さなサブセクションに対して行うクエリに役立ちます。たとえば、次のキー属性を使用して顧客の注文をすべて格納するテーブルがあるとします。

  • Partition key: CustomerId

  • Sort key: OrderId

未決済注文を追跡するには、 isOpen まだ発送されていない注文品。その後注文が出荷されたら、その属性は削除できます。CustomerId (パーティションキー) と isOpen (ソートキー) でインデックスを作成した場合は、isOpen が定義されている注文のみ、その中に表示されます。少数のみオープンになっている注文が多数ある場合は、テーブル全体をスキャンするよりも、オープンの注文のインデックスをクエリする方が時間もコストもかかりません。

次のようなアトリビュート タイプを使用する代わりに、 isOpen、インデックスで有効な並べ替え順になる値を持つ属性を使用できます。たとえば、各注文時の日付に設定された OrderOpenDate 属性を使用して、注文が確定した後でそれを削除することができます。このように、スパースなインデックスをクエリすると、各注文の確定日でソートされた項目が返ります。

Examples of Sparse Indexes in DynamoDB

グローバルセカンダリインデックスは、デフォルトでスパースです。グローバルセカンダリインデックスを作成する際、パーティションキーと、必要に応じてソートキーを指定します。インデックスには、これらの属性を含むベーステーブル内の項目のみ、表示されます。

グローバルセカンダリインデックスをスパースに設計することにより、優れたパフォーマンスを達成しながら、ベーステーブルの書き込みスループットよりも低くプロビジョニングできます。

たとえば、ゲームアプリケーションは、各ユーザーのすべてのスコアを追跡することができますが、一般的に、いくつかの高いスコアをクエリするだけで済みます。このシナリオは、次のように効率的に処理されます。


          スパースな GSI の例。

ここで、Rick は 3 つのゲームをプレイし、そのうちのひとつで Champ ステータスを達成しました。Padma は 4 つのゲームをプレイし、そのうちの 2 つで Champ ステータスを達成しました。Award 属性は、ユーザーが賞を獲得した項目にのみ存在することに注意してください。関連するグローバルセカンダリインデックスは次のようになります。


          スパースな GSI の例。

グローバルセカンダリインデックスには、頻繁にクエリされる上位スコアのみ含まれます。これらのスコアは、ベーステーブルの項目の小さなサブセットです。