DynamoDB で調べたことをまとめる
https://gyazo.com/af370535c3c0e20e5829c812dc87a20c
DynamoDB を触る必要があったので、少し触っていたことをメモする。
過去、触ったことはあるものの個人での利用であり、かつそこまで変わった使い方をしていなかったので改めて勉強した。
開発ツール
ローカル環境には dynamodb ローカルが AWS から用意されているので、それを利用すると良い。
また、サンプルデータの作成のために NoSQL Workbench というアプリケーションが AWS から提供されている。
このツールと DynamoDB ローカルを接続すれば、 CLI やプログラムをわざわざ書かなくても実験ができる。
例: prefectures と users テーブル
ユーザーが住んでいる地域をデータベースに格納するとする。
この時、 RDB だと prefectures テーブルと users テーブルをリレーションにするかと思う。
ただ、 DynamoDB の場合はリレーションという概念はないので、以下のような方法で実現した。
パーティションキーに userId、ソートキーを prefectureId とする。
基本的には検索には必ずパーティションキーを含めないといけない。
また、グローバルセカンダリインデックスで、逆にパーティションキーを prefectureId、ソートキーを userId のものを作成する。
これで、 userId から、もしくは prefectureId から検索が可能になる。
考え方としてはこちらの方の記事を参考にさせていただいた。
PK に USERXXXX 、 Prefecture#{XXXX} とかつけてそれぞれ パーティションキー、ソートキーに入力しておけばいいんじゃないかと思えてきた。
DynamoDB ローカルを利用して、同一キーのアイテムが作成された
optimizeDbBeforeStartup オプションを削除した上で、テーブルを再作成したら同一キーで更新できるようになった。
update_item は既存アイテムがない場合は新規作成れる
この挙動が良い時もあれば、都合が悪い時もある。
そのような場合は ConditionExpression で制約をつける。