DynamoDB で調べたことをまとめる
https://gyazo.com/af370535c3c0e20e5829c812dc87a20c
DynamoDB を触る必要があったので、少し触っていたことをメモする。
過去、触ったことはあるものの個人での利用であり、かつそこまで変わった使い方をしていなかったので改めて勉強した。
Python で DynamoDB にレコードを作成する
DynamoDB を触っていて気づいたことメモ(AWS SAM)
開発ツール
ローカル環境には dynamodb ローカルが AWS から用意されているので、それを利用すると良い。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html
また、サンプルデータの作成のために NoSQL Workbench というアプリケーションが AWS から提供されている。
このツールと DynamoDB ローカルを接続すれば、 CLI やプログラムをわざわざ書かなくても実験ができる。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/workbench.html
例: prefectures と users テーブル
ユーザーが住んでいる地域をデータベースに格納するとする。
この時、 RDB だと prefectures テーブルと users テーブルをリレーションにするかと思う。
ただ、 DynamoDB の場合はリレーションという概念はないので、以下のような方法で実現した。
パーティションキーに userId、ソートキーを prefectureId とする。
基本的には検索には必ずパーティションキーを含めないといけない。
また、グローバルセカンダリインデックスで、逆にパーティションキーを prefectureId、ソートキーを userId のものを作成する。
これで、 userId から、もしくは prefectureId から検索が可能になる。
考え方としてはこちらの方の記事を参考にさせていただいた。
【SQL脳から切り替えよう】DynamoDB使ってみた
PK に USERXXXX 、 Prefecture#{XXXX} とかつけてそれぞれ パーティションキー、ソートキーに入力しておけばいいんじゃないかと思えてきた。
DynamoDB ローカルを利用して、同一キーのアイテムが作成された
DynamoDB Localで同一のハッシュキーが出来てしまった場合の対処法
/kidaaam-92022284/DynamoDB LocalでUpdate時にKeyが重複してItem作成されるバグ
optimizeDbBeforeStartup オプションを削除した上で、テーブルを再作成したら同一キーで更新できるようになった。
update_item は既存アイテムがない場合は新規作成れる
この挙動が良い時もあれば、都合が悪い時もある。
そのような場合は ConditionExpression で制約をつける。
【DynamoDB】updateItemで新規項目を追加しないようにする 〜条件付き書き込み(ConditionExpression)を使って〜
#aws