DynamoDB は、事前にデータアクセスを行う関係で、後からインデックスを貼り付けたくなるシーンが多いと思います。
実際に AWS へ質問してみたので、その回答を交え解説します!
Global secondary index(GSI) は既存のテーブルに追加することが可能、一方で local secondary index(LSI)はテーブルの作成時のみに作成が可能となっております。
AWS の公式サイトへ記載があります。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SecondaryIndexes.html
上記のドキュメントの通り、GSI はテーブルの作成と同時に作成可能であり、かつ既存テーブルに新しい GSI を追加したり、既存の GSI を削除することも可能です。
対して LSI は、テーブル作成と同時に作成されますが、既存のテーブルに追加したり、存在する LSI を削除したりすることはできません。なので、LSI の貼り付けはテーブル作成時の一度きりと言えるでしょう。
GSI 作成時の各属性については、DynamoDB プロビジョニング時の、Projection:ProjectionType の設定に基づいて射影されます。
KEYS_ONLY の場合は、インデックスに指定したキー情報のみ射影されますし、INCLUDE であれば NonKeyAttributes に指定したキー情報が射影されるといった挙動です。( 逆にインデックスキーの属性が存在しない、空文字などは GSI に挿入されません )
この辺りは、GSI のドキュメント をきちんと確認してから開発を行いましょう。
DynamoDB は後から GSI の作成が可能なので、新たな検索要件が発生してもある程度の柔軟対応が可能です。
ただし、そもそも最初の設計がミスっていれば、後から GSI が追加可能だとしてもすぐに限界がきます。( 新たにテーブルもう一つ作成しないと・・といった状況になりかねないです )
最初の設計は経験値のある人に任せるなど、慎重に行いましょう。
サーバーレス開発については、お気軽にお問い合わせください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎