0

アクティビティ ストリーム データを保持するテーブルのキーをセットアップする最善の方法は何かと考えています。アクティビティの種類ごとに異なる属性があります (共通のものもあります)。以下は、いくつかのアイテムで構成されるものの例です。

フォロー アクティビティ:

  • タイプ
  • ユーザーID
  • タイムスタンプ
  • follower_user_id
  • followee_user_id

コメント活動

  • タイプ
  • ユーザーID
  • タイムスタンプ
  • comment_id
  • commenter_user_id
  • commented_user_id

ストリームを表示するために、user_id に対してクエリを実行し、タイムスタンプで並べ替えます。他のタイプのクエリもあります。たとえば、user_id AND type や、comment_id、follower_user_id などをクエリする必要がある場合があります。

だから私の質問は:

  1. 主キーは、user_id とタイムスタンプを使用したハッシュ キーと範囲キーにする必要がありますか?
  2. 他のすべてのアイテム (comment_id など) にセカンダリ インデックスを作成する必要がありますか? または、インデックスがなくても結果は十分に速く返されますか? セカンダリ インデックスは 5 つに制限されており、実行する必要のあるすべての種類のクエリには不十分です。
4

1 に答える 1

0

データを 2 つ (またはそれ以上) のテーブルに分割して、クエリをより有効に活用できるかどうかを検討します。必要に応じて (そして必要に応じて) 2 つを組み合わせます。つまり、SQL で行うような識別子ではなく、型がテーブルになります。

テーブルを分離しない場合、私の答えは次のようになります

  1. はい - ほとんどの場合、それがあなたの使用方法であるように思われることを考えると、それが最善の策だと思います。
  2. いいえ。ただし、最も頻繁に実行されるクエリと、そのクエリに関するパフォーマンスの考慮事項を考慮する必要があります。どれがパフォーマンスを発揮する必要があり、どれが「十分に良い」か?

キャッシングと非同期処理を組み合わせることで、スキャンの実行速度が遅くても十分に機能しますが、ローカル セカンダリ インデックスが必要になるわけではありません。

于 2013-08-07T02:13:26.943 に答える