ユーザーを扱うモデルを想定します。ユーザーはUsers
という表に格納されます。すべてのユーザーは、固有の識別子(パーティションキー)によって一意に識別されます。すべてのユーザーは、Reports
テーブルに格納されている0個以上のレポートを保持している可能性があります。私はReports
テーブルを設計するための2つの方法のDynamoDB:UUIDと組み合せNatural ID +タイムスタンプ
を考えることができます:
- UUIDからなるパーティション・キー
- パーティションのユーザー自然識別子からなるキーと、タイムスタンプからなるソートキーレポートは、ミリ秒レベルのタイムスタンプ精度の
に作成されたとき、それは、複数のレポートが同じミリ秒の間、特定のユーザーのために生成することができないと仮定しても安全である(第2の精度もあるべきです 安全)。
推奨されるアプローチは何ですか?
ありがとうございます!ユーザーあたりのレポートの配布がどのように決定に影響を与えるべきかを詳しく教えてください。ユーザーあたりのレポート数が多い場合、ナチュラルID +タイムスタンプを「悪い」ソリューションとするのはなぜですか? –
DynamoDBは、一様分布で非常によくスケールされます。つまり、アイテムのキーが無作為になるほど、あなたはより良い選択肢になります。コンポジットキー(パーティション+ソート)を使用する場合は、各パーティションキーにほぼ同数のアイテムを用意することをお勧めします。 –
私のパーティションキーは、十分にランダムでなければならない個人的な識別子です。ユーザーあたりのレポートの数はユーザーによって異なりますが、比較的低くなります。私は、レポートがさまざまなパーティションにうまく分散されることを理解しています。ありがとう! –