Open1

Dynamodbのグローバルセカンダリインデックスについて

ふじしろふじしろ

グローバルセカンダリインデックス(GSI)

Q:
DynamoDBのセカンダリインデックスの概念がよくわかりません。
わかりやすく、必要に応じて図や表も用いて解説してもらえますか

A:
DynamoDBのセカンダリインデックスについて解説します。DynamoDBでは、データアクセスのパフォーマンスを向上させるためにセカンダリインデックスが使用されます。これは、テーブルのプライマリキー以外の属性に基づいてデータに効率的にアクセスするための手段です。

セカンダリインデックスの種類

DynamoDBでは、主に2種類のセカンダリインデックスがあります:

1. グローバルセカンダリインデックス (GSI):

  • テーブルのプライマリキーとは異なるキー構成を持ちます。
  • テーブル全体を対象にします。
  • 読み取りと書き込みの容量を個別に設定できます。
  • テーブルの作成後に追加や削除が可能です。

2. ローカルセカンダリインデックス (LSI):

  • テーブルのプライマリキーと同じパーティションキーを持ち、異なるソートキーを使用します。
  • 同じパーティション内のデータに対してのみ効果的です。
  • テーブルの読み取り容量に紐づいています。
  • テーブル作成時にのみ定義可能で、後から追加や削除はできません。

セカンダリインデックスの利用

セカンダリインデックスの主な利用目的は、以下の通りです:

  • 特定の属性での高速なデータ検索:プライマリキー以外の属性でデータを検索する場合に役立ちます。
  • フレキシブルなクエリ:異なる属性の組み合わせでデータをクエリする柔軟性を提供します。

図解

以下に、グローバルセカンダリインデックスの簡単な図解を示します。

  • テーブル:
    • プライマリキー:UserID
    • 属性:Email, Name, Age
  • GSI:
    • プライマリキー:Email

このGSIを使用して、Email属性に基づいてユーザーを迅速に検索できます。

テーブルのレイアウト:
| UserID (PK) | Email      | Name   | Age |
|-------------|------------|--------|-----|
| User1       | user1@ex.com| Alice |  30 |
| User2       | user2@ex.com| Bob   |  25 |

GSIのレイアウト:
| Email (PK)    | UserID | Name   | Age |
|---------------|--------|--------|-----|
| user1@ex.com  | User1  | Alice  |  30 |
| user2@ex.com  | User2  | Bob    |  25 |

この例では、UserIDではなくEmailを使ってユーザーを検索したい場合にGSIが役立ちます。

セカンダリインデックスを効果的に使用することで、DynamoDBのデータモデリングの柔軟性が高まり、アプリケーションのパフォーマンスを最適化することができます。ただし、インデックスには追加のストレージとスループットコストが発生することに注意が必要です。