AWS

【DynamoDB】セカンダリインデックスの基本

テーブルから項目を取得する際に、プライマリキーを指定する以外の方法で項目を取得したい場合があります。

テーブルに対してスキャンを実行し取得する方法もありますが、スキャンは全てのテーブルの項目を取得する為、項目数が大量の場合、取得に時間がかかるのとコストもかかります。
セカンダリインデックスを指定することにより、テーブルのプライマリキー以外の属性を指定して項目を取得できます。
セカンダリインデックスは以下の2種類が存在します。

・グローバルセカンダリインデックス
・ローカルセカンダリインデックス

デフォルトでグローバルセカンダリインデックスは20個、ローカルセカンダリインデックスは5個設定可能です。

共通事項

ベーステーブル

セカンダリインデックスはテーブルから作成します。このテーブルをベーステーブル(基本テーブル)と呼びます。

プライマリキー

セカンダリインデックスもプライマリキーの設定が必要です。プライマリキーの指定については以下の点に注意して下さい。

・通常のテーブルのプライマリキーと違ってユニークである必要はありません。
・パーテションキーの指定は必須です。
・プライマリキーのデータタイプの指定は String、Number、または Binary となります。ドキュメント型、セット型は指定できません。
・パーテションキーとソートキーに同じ属性を指定しないで下さい。(これはベーステーブルでも同様です。)

属性の射影

セカンダリインデックスを作成するとセカンダリインデックスで指定したプライマリキーの属性はベーステーブルから射影(コピー)されます。
なお、セカンダリインデックスを作成すると少なくともベーステーブルからプライマリキーが射影されます。
また、セカンダリインデックスを作成する時にベーステーブルからセカンダリインデックスへ、上記以外の射影(コピー)する属性を指定することができます。

ベーステーブルからの項目の反映

DynamoDBはセカンダリインデックスの項目を自動的に維持(同期)します。項目を追加、変更、削除するとそれに応じてインデックスの対応する項目も追加、変更、削除されます。
従ってセカンダリインデックスはベーステーブル以外から項目を追加、変更、削除されることはありません。
なお、項目の同期は結果生合成モデルが適用され反映されます。

フェッチ

セカンダリインデックスから項目を取得する際に、ベーステーブルには存在し、セカンダリインデックスに存在しない属性の取得を行おうとすると、DynamoDBはベーステーブルから自動的に属性を取得します。これをフェッチと言います。

データの取得

インデックステーブルに対するデータの取得はクエリー、スキャンが可能です。
クエリーを実行する場合、プライマリキーを指定します。パーティションキーの指定は必須です。ソートキーの指定は任意です。ソートキーのみの指定はできません。

セカンダリインデックへ項目を追加する時の注意

セカンダリインデックスで指定したプライマリーキー属性が、ベーステーブルから追加される場合、セカンダリインデックスのプライマリーキー属性のデータタイプとベーステーブルの属性のデータタイプを合わせる必要があります。
データタイプが合わない場合、ValidationException が返却されます。
DynamoDBはプライマリーキー以外はスキーマレスです。従ってプライマリーキー以外の属性のデータタイプを定義する必要はありませんが、セカンダリインデックスに影響する項目を追加、更新する場合は注意して下さい。

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

詳細は以下を参照して下さい。

ローカルセカンダリインデックス

詳細は以下を参照して下さい。

最後に

次回はグローバルセカンダリインデックスについて説明します。

© DeNnie.Lab All Rights Reserved.