DynamoDB で新しいテーブルを設計しています。すでにいくつかのドキュメントを読みましたが、今後問題が発生しないようにするためにどの設計スキーマに従うべきかを理解できません。
現在のアプローチ
表 - イベント
- eventId (HashKey)
- userId
- createdAt
- some other attributes...
表 - ユーザー
- userId (HashKey)
- name
- birth
- address
イベント テーブルには、何百万ものエントリが含まれます。ユーザーは現時点で約 20 エントリになる予定です。
次のクエリを実行する必要があります。
- GET paginated events from specific userId ordered by createdAt
- GET paginated events from specific userId between some range of dates and ordered by createdAt
- GET specific event entry by eventId
そこで、次の設定でイベント テーブルに GSI (グローバル セカンダリ インデックス) を作成することを考えました。
- userId (HashKey)
- createdAt (RangeKey)
しかし、私の質問は次のとおりです。最初の設計は理にかなっていますか? どういうわけか、次の設定でイベントテーブルを設計できると感じています:
- userId (HashKey)
- eventId (SortKey)
しかし、このアプローチに従うと、ホット パーティションの落とし穴に陥ると思います。
いくつかのアドバイスや推奨事項をいただければ幸いです。
ありがとう。