Amazon DynamoDB を使用して、アクティビティ ストリームのイベント ベースのデータを保存しています。
毎月新しいテーブルを自動的に作成し、関連する各テーブルにイベント データを格納するつもりです。このようにして、必要に応じて古いテーブルを削除するだけで古い月をすばやく取り除くことができ、より新しいテーブルへの負荷をより適切にプロビジョニングできます。
ただし、Amazon ドキュメントを読むと、ハッシュ キー自体が非常に重要であることがわかります。
プロビジョニングされたスループットは、主キーの選択と、個々の項目のワークロード パターンに依存します。データを保存するとき、Amazon DynamoDB はテーブルの項目を複数のパーティションに分割し、主にハッシュ キー要素に基づいてデータを分散します。テーブルに関連付けられたプロビジョニング済みスループットもパーティション間で均等に分割され、パーティション間でプロビジョニング済みスループットが共有されることはありません。
私はこれを理解するのに苦労しています。
したがって、上記の私の質問は、これら2つの間でどのハッシュキーが優れているかということです。
1382465533_john.doe
また:
john.doe_1382465533
上記のキーは、ユーザー ID とイベントのタイムスタンプを組み合わせたものです。
これらのテーブルのクエリ方法...
これらのテーブルには範囲キーはありません。このユース ケースでは必要ありません。
このデータは、ユーザーのアクティビティ フィードを作成するために使用されます。
イベントが発生すると、個々のアクティビティ ID がユーザーのフォロワーredisリスト (ユーザーごとに 1 つのリスト) にプッシュ (ファンアウト) されます。
したがって、ユーザーがストリームをリクエストすると、次の処理が行われます。
- Redisから activityid のリストを取得する
- activityid をループし、BatchGetItem クエリを作成して DynamoDB からプルします。
以上のことを念頭に置いて、アクティビティ テーブルでハッシュ キーを定義する最善の方法を理解する必要があります。タイムスタンプが最初か、ユーザー ID が最初です。ハッシュキーを自動的に分割するために DynamoDB が使用するロジックは何ですか?
アドバイスをよろしくお願いします。