0

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)

しかし、このアプローチに従うと、ホット パーティションの落とし穴に陥ると思います。

いくつかのアドバイスや推奨事項をいただければ幸いです。

ありがとう。

4

1 に答える 1