omuronの備忘録

個人的な備忘録

DynamoDB の基礎の備忘録

Lambda とセットで、DynamoDB をよく使うようになったですが、インデックス周りがいつもあやふやになるので、備忘録の作成。
DVA は取ってないから、この辺りは苦手です。
取るならちゃんと覚えておかないと。

DynamoDB

NoSQL

KeyValue もしくは KeyObject 形式の NoSQL に分類される DB 。
スキーマーレス なので、作成時にはプライマリーキーだけ指定すれば問題なし。
データ追加時に、属性( Attribute )は増やせる。
属性とは、RDS でいうカラムに相当するもの。

プライマリキー

作成時にプライマリキーの指定が必要。
プライマリキーには、以下の2種類がある。

  • パーティションキー
    • 必ず設定する
    • 後述のソートキーを指定せず、単独利用の場合は主キーになるので重複不可
  • ソートキー

セカンダリインデックス

プライマリキー以外で、絞り込みを実行したい場合に利用する。
セカンダリインデックスには、以下の2種類がある。

  • ローカルセカンダリインデックス (LSI)
  • グローバルセカンダリインデックス (GSI)
    • パーティションキーとソートキーを任意の属性に設定するイメージ
      • ただし属性値はテーブル内で一意である必要はない
    • 内部的には新しいテーブルができるようなもの
      • 遅くなる、課金が増えるなど注意が必要

まとめ

インデックスを多用する作りになる場合は、そもそも DynamoDB の要件にあってない可能性があるので注意したい。
RDS でいうレコードに相当するアイテム( Item )単位で、属性( Attribute )を変更できるのも特徴。
この辺りのテクニックは、re:Invent 2019 の「DynamoDBデータモデリング (CMY304) 」が参考になったので、クラスメソッドさんの レポート がとても役に立ちます。