はじめに
AWSのフルマネージドNoSQLサービス、DynamoDBのテーブル設計をする機会があった。
以前に右も左も分からない状態で設計をしたことがあったが、学びがあったので自分用にメモ。
パーティションキー (PK)
RDBでいうところのプライマリキーである。ソートキーが異なれば重複可👌
パーティションキーごとに、物理的な保存場所が異なる。
DynamoDBはキャパシティーユニットに応じてスケーリングできる。
この時、パーティションキーの値がなるべく分散するように設計する。
特定のキーにアクセスが集中すると、スケーリングしても速度が上がらず結果的に性能不足になってしまうからだ。
したがって、日付などの分散しにくい値はよくない。
なるべく分散する値を選んで設計しよう。
ソートキー (SK)
パーティションキーで指定した値を取り出す際の順序が決まるキー。
これ単体で検索(クエリ)することはできず、パーティションキーと組み合わせて検索する。
その名の通り順番を決めるキーなので、UNIXタイムスタンプなどソートしたい要素を指定すると良いだろう。
結論
- PK
- 物理的に保存する場所を定義
- なるべく分散する値
- SK
- PKと組み合わせて検索
- ソートしたい要素
- 任意
おまけ
以前はRDBしか使ったことがなかったのでたくさんのカラムを持つテーブル設計をしてしまったが、NoSQLではある程度JSONとしてObjectやArrayをカラムに記録する設計も大アリのようである。