0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RDBに慣れていた自分がDynamoDBを使ってハマった事

Last updated at Posted at 2020-12-28

はじめに

ずっとRDB(ほぼmysql)で開発をしてきた自分がDynamoDBを使用した時にハマった事をざっくり記載します。
自分のメ同じような状況の方の参考になればと思います。

データを検索(where区)する時は、キーに指定したカラムしか検索できない

ハッシュキーとレンジキーに指定したカラムしか検索出来ないので、その他で検索したい場合は
ローカルセカンダリインデックス(LSI)かグローバルセカンダリインデックス(GSI)を使う必要があリます。
グローバルセカンダリインデックスを使えばある程度の検索条件の追加などはクリア出来そうです。

グローバルセカンダリインデックスの公式doc

複数テーブルを更新する時にtransactionを使う事は可能

親子テーブル等の構成の時に一貫性を保って更新したい時はDynamoDBでもtransactionをかける事が可能です。
但し25アイテムまでと制限があるので同時にたくさんのレコードを更新する処理には向いてないと思います。

transactionについての公式doc

取得したデータ量が1mbを越えた場合、1mbまでのデータが取得される(残りは取得できない)

テスト時に少ないデータでテストをしているといつの間にか1mbを超えていて全てのデータが取得できて
いなかったと言った事になりそうなので、複数データを取得する場合などは最初から1mbを超えた場合を想定しておく事が必要そうです。

1mbを超えた場合の対処法の公式doc

auto incrementのような機能はない

各テーブル毎のsequence numberを保存する専用のテーブルを作成し、アトミックカウンタを使うことにより実現する事は可能です。

アトミックカウンタ公式doc

scanは出来るだけ避けてqueryを使う

scanは常にテーブル全体がscanされるため、どうしてもという時以外使わないように設計しないとデータ量が増えた時等に問題になりそうです。

おわりに

仕様の更新等でだいぶ使いやすくなってきているような気はしますが、RDB経験者にはあまりドキュメントを読まずに実装しようとすると苦戦するポイントもあるように思います。
ドキュメントを読んでいくとまだ他にも制約などがありそうなので、経験者に聞くもしくはドキュメントを読み込んだ上で採用した方が良さそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?