私はソーシャルポータルのビルドのアクティビティフィードのインデックスを作成しようとしています。ポータルでは、ユーザーがお互いにフォローして、フォローしているユーザーからの更新情報を、日付別にソートされたアクティビティフィードとして取得できます。アクティビティストリームまたはニュースフィードのSOLRインデックスを作成する
例えば、ユーザAは、E & F.そこでユーザAは、彼/彼女のアクティビティフィードにB、C、D、E & Fからのすべての記事を参照すべきである、ユーザB、C、D以下であろう。
投稿が2つのフィールドで構成されているとします。 1.投稿のテキスト。 (text_field) 2.それを掲示したユーザーの名前/ UID。 (user_field)
現在、私はすべての投稿のインデックスを作成し、text_field
& user_field
をインデックスに登録しています。規模では、1,000,000以上の投稿があります。ユーザーが1000人でない場合、ユーザーは100人を追跡できます。このシナリオのインデックスを作成する最良の方法は何でしょうか?
- フォロワーをインデックスに登録して、すばやく検索してから、すべてのユーザーの投稿を日付別に並べ替えるための2番目のクエリに渡す必要がありますか?
- これらすべての投稿で構成されるインデックスを照会する最良の方法は、後続のすべてのユーザーのUIDを渡すことですか?これを考慮すると100年以上になる可能性があります。
更新: ニュースフィードのためのSolrを使用する動機は、主this detailed slideとOpenSocialチームと私の簡単な議論に触発されました。
ソーシャルポータルを使い始めたとき、Fan out on write
は過度に高価なようです。しかし、Fan out on read
が良いです。スライドとOpenSocialチームはともにFan out on read
の検索バックエンドを使用することを提案しました。上記のThe slideには、それがどのように役立ったかに関するデータもあります。
現在、フィードはフラットになり、ソート基準のみが日付(リーセンシー)になります。関連性やより密接なグループからの投稿は考慮しません。
私はいくつかの詳細で自分の質問を更新しました。フィードは投稿者との関連性や近さを考慮しません。私たちは平らな飼料を日付順に並べます。 'Fan-out on read'というフィードを使うとき、検索バックエンドを使うという提案がありました。私は質問の更新でこれを少し詳細に追加しました。 – esafwan