ニュースフィードを作成する最も良い方法は何ですか?多くの結合ステートメントなしでニュースフィードを作成するには
現在、私は、誰かがレコードを作成するたびに、新しいnewsfeedactivityレコードを作成するオブザーバーを持っています。しかし、プライバシを処理するためには、適切な出力を得るために7〜8個の結合が必要です。
これは遅くて非効率的なようです。スコープとして適切なnewsfeedactivityレコードを引き出すためのもう1つの戦略は何ですか?
詳細:
は現在、私は、ユーザーが、彼らが取り組んでいるプロジェクトを追跡するのに役立つサイトを持っています。公開プロジェクトと非公開プロジェクト(共同作業者を招待できる場所)があります。
パブリックプロジェクトの作成時にニュースフィードに含めたい。あなたが私的プロジェクトに招待されたとき。ユーザーがプロジェクトに従うとき。そしてあなたが従っている他のユーザーのすべての行動。それからプライベートプロジェクトでは、誰がプロジェクトにアクセスできるかを決定する別のテーブルを持っています。 (これらのプロジェクトのそれぞれについては、ニュースフィードにも掲載したいコメントもあります)。
現在、次のすべての関係が結合表にあります。そのため、多くの結合があります。
クエリの種類のアイデアを取得するには - 私はそれがこのようなものに見えるだろうと考えています:。
.ID BY編集: 私はおそらくこれらの行に沿ってレディスを使用して終了するつもりだと思う。 http://blog.waxman.me/how-to-build-a-fast-news-feed-in-redis
news_feed_activities
を選択する*news_feed_activities
左からはnews_feed_activities
.following_id =user_following_relationships
ONuser_following_relationships
を登録しよう。 user_idはLEFTはuser_project_relationships
.project_id =news_feed_activities
.responding_to_idとnews_feed_activities
.responding_to_type = 'プロジェクト' ONuser_project_relationships
を登録しよう (user_following_relationships
.user_id = 1 ORuser_project_relationships
.user_id = 1 ORnews_feed_activities
.user_id = 1 ORup2
を.user_id = 1)news_feed_activities
.ID ORDER BY GROUPnews_feed_activities
が
DESC
これは参考になるかもしれません:http:// stackoverflow。com/questions/3809430/implementation-a-news-feed-activity-feed-on-several-models-recommend –
ありがとうございました。私は最初に自分のニュースフィードを作成していたときに使っていました。パーソナライゼーションやプライバシーの設定がない場合は素晴らしい機能です。私はプライバシーの設定に取り組もうとしていますし、すべてのニュースフィード活動記録を効率的にフィルタリングする方法がわかりません(私はスコープが必要なページ付けをしたいと思っています)。 – Cyrus
(単純な)プライバシー設定についての私の最初の考えは、結合が必要な追加のテーブルを追加するのではなく、テーブル内にいくつかのフラグまたはステータスカラムを使用することです。 7つか8つの結合(=追加のテーブル?)は、そのようなタスクのためにたくさんのように聞こえる。あなたは私たちにあなたの必要条件に関するより多くの情報を提供して、役に立つ反応を得るべきです。一般的に、インデックスが適切に設定されている限り、いくつかの結合テーブルについて心配する必要はありません。 –