2011-06-26 10 views
0

この質問は...何千回を頼まれましたので、あなたがそれに答える/読み込みをスキップすることにした場合、それは不公平ではないのですが、私はまだ人が見ると私のアプローチにコメントしたいと思いましたFourSquareのような活動フィードを必要とするサイトを構築する。ニュースフィードへの私のアプローチが間違っている方法は何ですか?</p> <p>私は」...

私のサイトには、この機能があり、永遠に保存する必要はありません。

したがって、event_typeuser_idをMySQLテーブルに書き込みます。テーブルに新しいイベントを書き込む前に、古い行、不要な行をすべて削除します(合計行数をカウントし、event_idをすべて冗長化した行より少なくして削除します)。私はテーブルを剪定し、イベントが発生するたびに新しい行を書きます。フロントエンドでは、ユーザーが生成されたテキストがない場合NULLある別のuser_text列...

があります、私はGET経由でPHPファイルをチェックすることにjQueryを持っているユーザーが持っているすべてのx秒サイトオープン。 jQueryは、受信した最新の更新IDで要求を送信します。私のバックエンドで生成された<div>タグには、 "id"属性がMySQLの行IDとして設定されています。私は、メモリ内の非常に小さなint型の値で変数を格納から絶対にないパフォーマンスへの影響はありません推測してもこの方法では、私が機能を持っている...、メモリ内last_received_id保存する

を持っていませんevent_typeとuser_idに応じて「更新テキスト」を生成します。jQueryから渡します。user_text列が空であるかどうかを確認します。更新テキストはjQueryに返され、新たに受信したイベント<div>をいくつかのエフェクトとともにフィードに追加すると同時に、 "テールエンド"イベント< div>をエフェクトとともに取り除きます。

もし私が(もっと重要なのは、クライアント)、私は自分のデータベース(または別のもの)に「イベントアーカイブ」テーブルを作成して、それらの冗長な行をすべて削除してから削除することができます。この方法では、イベント情報は永遠に保存され、ライブサイトのパフォーマンスには影響しません。

私はCodeIgniterを使用していますので、繰り返しコードはどこにもありません。関連するすべての関数は、それぞれライブラリとモデルのLiveUpdatesクラスに入っています。

私はKISSイデオロギーに固執しながら問題を解決しているので、私はそれをやっている方法にかなり満足しています...しかし、まだ誰かが、より良い方法を示すいくつかのリソースを教えてくださいそれをするために?この件に関するGoogleの検索では、あまりにも多くの記事/ SOの質問が明らかになりました。私はすでに彼らを辿ってきた他の開発者の経験から恩恵を受けるといいです...

答えて

2

正しいインデックスパフォーマンスに影響を与えずにすべてのイベントを1つのテーブルに保持できない理由はありません。

新しいポーリングがないときにポーリングを正しく戻すように工夫すると、各クライアントがサーバー上に持つ負荷を最小限に抑えることができます。プッシュ通知(ハイブリッド遅延接続クローズ方法)も調べると、これはさらに大規模なスケールアップに役立ちます。

最後に、クライアントの変数の格納について心配する必要は全くありません。これは早すぎる最適化です。パフォーマンスの問題は、多くのユーザーからのWebサーバーへの接続や適切なインデックスのないDBテーブルへの接続の雪崩にあります。インデックスについて

:テーブルに対する最も一般的なクエリを模索して行うことができ、最小限の数は(1-5のように)読み込むときにインデックスが「適切」です。あなたの場合、これは増分IDまたは日付(十分な精度がある場合)です。それを正しく設計すると、最新のupdate_idを見つける操作は単一の読み込みでなければなりません。次に、クライアントが更新されたコンテンツがあるかどうかを確認するためにajaxリクエストを送信したら、最初にサブミットされた値(idまたはtime)が現在の値より小さいかどうかを確認するクエリを実行します。その場合は、2番目のクエリで新しいコンテンツをすぐに応答します。できるだけ軽量の「ping」アクションを維持することは、たとえ新しいコンテンツがある場合にわずかに大きなコストがかかるとしても、あなたの目標です。

プッシュを使用する方がはるかに優れていますので、Cometをご覧ください。

お読みは、クエリで起こっているどのように多くのわからない場合、私はあなたがそれを見つけると、それを適切に評価することができるようにデータベースのこの側面を探求することをお勧めします。

更新:「はい新しいコンテンツがあります」という回答を得て実際にコンテンツを要求しているという考えを提供するのは、おそらく最高ではなかったでしょう。非常に興味深い関連資料はWhy the Fat Pings Winをご覧ください。

+0

あなたの意見では、live_updatesテーブルの主キーupdate_idは「適切なインデックス」になりますか? –

+0

すべてのことを読んでいただき、ありがとうございました:)。 –

+1

@aditya更新しました。 – ErikE

関連する問題