自分のFriendの更新情報が一覧できるページ(Home Page, Mypage的な)を効率的に表示するロジックについて言及されたページ、または書籍などを教えてください。
何も考えずに作ると以下のようになると思いますが、これだとユーザー数の増加に比例して、かなり負荷が高くなることが想像できます。
(1)自分のFriendのIDを全て取得
(2)取得した全IDで、日記などのレコードを検索
(3)更新日付が降順になるようソート
(4)表示
ある程度はバッチなどで回避できると思いますが、mixiなどは体感的に半リアルに近い更新速度のような気がします。このように高速でなおかつ負荷の低いロジックを教えてください。
SNSということで、相互に繋がっていることを認識できるという前提の下でしたら
閲覧側が更新を取るのではなく、更新側が教えてあげればよいかなと思います。
日記を例にすると。
1. Aが日記を更新。
2. Aのフレンドリストのユーザーを取得
3. 取得したユーザーに更新を通達
4-a. 更新通達を受けた時点でユーザーのページを更新
4-b. 更新通達を受けたユーザーがログインしたら更新
こうすることで、最低限必要な場所のみが参照されるようになると思います。
裏づけが書籍やwebでほしいということでしたらごめんなさい。
ありがとうございます。
#裏付けはあればよし、無ければ処理フローを教えていただければ全く問題ないです。
>閲覧側が更新を取るのではなく、更新側が教えてあげればよいかなと思います。
確かに。
掲示板などでもそうですが、更新者よりも閲覧者が多い環境下では、この方法は確かに有効な気がします。更新者が最低でも1回は見ますものね。
ありがとうございます!
他にもあればよろしくお願いします。
これって、単に自動作成型のダイナミックRSSフィードを使ってるんじゃないですか・・・?
(1)Friendが日記などを更新 > friendのRSSがアップデートされる
(2)自分がログイン > 自分のFriendのIDを全て取得
(2)取得した全IDに該当するRSSフィードを取得
(3)フィードリーダーが順序、表示件数の設定に基づいて取得したRSSフィードを組み直す
(4)表示
参考文献で良いのがなかったのですが・・・こんな感じ?
これはクライアント側(JavaScriptなど)で処理する前提でしょうか?
であれば、ある程度の規模まで絞り込んだデータを送信して、後はクライアントまかせという考え方は、サーバ側の負荷の軽減にはなりそうですね。
> (1)Friendが日記などを更新 > friendのRSSがアップデートされる
> (2)自分がログイン > 自分のFriendのIDを全て取得
この仕様だと1,000人Friendがいた時、1RSS1人分の更新情報だと1回アクセスしただけで1,000回分のリクエストが走ることになりますから、サーバには優しくないというか、結構厳しいかもしれません。現実的には自分のIDを渡すと、Friend全員の更新情報が一定量返却されるとか、そんな仕様になるかもしれませんね。
面白い提案ありがとうございます!
イマジネーションが膨らみました。
ありがとうございます。
なつかしいですね、この記事はリアルタイムで見ていました。
良い記事ではあるのですが、いかんせんサイト全体のインフラの話に重点がおかれて、質問事項のロジックの話まで到達していないです。引き続きよろしくお願いします。