DynamoDBとは
AWSのDynamoDBは柔軟なNoSQLデータベースサービスです。
DynamoDBではキーの設定が重要です。
パーティションキー: 各レコードのユニークな識別子です。DynamoDBはこのキーを使用してデータをパーティションに分散させ、効率的なアクセスを実現します。
ソートキー: 任意で設定できる追加のキーで、パーティションキーと合わせてプライマリキーを形成します。ソートキーを使用することで、同じパーティションキーを持つアイテムの順序付けや範囲クエリが可能になります。
グローバルセカンダリインデックス(GSI)
GSIを使用することで、元のテーブルのパーティションキーとは異なる属性を新たなパーティションキー(またはソートキー)として設定し、データをクエリできます。
グローバルセカンダリインデックス(GSI)の利用例
DynamoDBのテーブルにおいて複数の特定のパーティションキーを持つアイテムを一度に取得する必要がある場合があります。たとえば、パーティションキーが「A」と「B」のアイテムを同時にクエリしたい場合には、グローバルセカンダリインデックスを使用すると簡単に取得することができます。
グローバルセカンダリインデックス(GSI)を追加する
ここでは、DynamoDBにGSIを追加する手順を説明します。
campany_cdとuser_idがPKであるuser_tableというテーブルに、ユーザーをグループ化して取得できるようにuser_group_idを追加し、インデックスを作ろうと思います。
既存のテーブルにインデックスを追加する
aws dynamodb create-table \
--table-name user_table \
--attribute-definitions AttributeName=company_id,AttributeType=S \
AttributeName=user_id,AttributeType=S \
AttributeName=user_group_id,AttributeType=S \
--key-schema AttributeName=company_id,KeyType=HASH \
AttributeName=user_id,KeyType=RANGE \
--global-secondary-indexes \
"[
{
\"IndexName\": \"user_group_id_index\",
\"KeySchema\": [{\"AttributeName\":\"user_group_id\",\"KeyType\":\"HASH\"},
\"Projection\":{
\"ProjectionType\":\"ALL\",
},
}
]"
)
既存のテーブルにインデックスを追加する
aws dynamodb update-table \
--table-name user_table \
--attribute-definitions AttributeName=user_group_id,AttributeType=S \
--global-secondary-index-updates \
"[
{
\"Create\": {
\"IndexName\": \"user_group_id_index\",
\"KeySchema\": [{\"AttributeName\":\"user_group_id\",\"KeyType\":\"HASH\"},
\"Projection\":{
\"ProjectionType\":\"ALL\",
}
}
}
]"
Cloud Formationで構築している場合
以下のように、GlobalSecondaryIndexesというフィールドを入力することで、インデックスを増やすことができます。
AttributeDefinitions:
- AttributeName: company_id
AttributeType: S
- AttributeName: user_id
AttributeType: S
- AttributeName: user_group_id
AttributeType: S
KeySchema:
- AttributeName: company_id
KeyType: HASH
- AttributeName: user_id
KeyType: RANGE
GlobalSecondaryIndexes:
- IndexName: user_group_id_index ## インデックス名
KeySchema:
- AttributeName: user_group_id ## パーティションキーとして設定したいカラム
KeyType: HASH
Projection:
ProjectionType: ALL ## ALL, KEYS_ONLY, INCLUDE が設定できます
注意点
プロジェクションの設定を適切に行わないと、不必要なコスト増加やパフォーマンス低下の恐れがあるようです。
ProjectionTypeがALLの場合、取得するデータは全ての列を取得できます。
KEYS_ONLYはテーブルのキー属性(パーティションキーとソートキー)のみ、INCLUDEは特定の非キー属性を含めることができる設定です。
ProjectionTypeを必要最小限の単位やスループットの設定をする、効率的なクエリの設計を行うなどの工夫が必要です。
コメント