2011-11-11 2 views
1

私はサービスのネットワークを構築しており、すべてのサービスは完全に異なっています。今では、ユーザーが最も利用するサービスの自動リストを作成して、使いやすさを高めるダッシュボードを作成しています。サーバーを壊すことなくユーザーについて学んでください。

しかし、どの製品をユーザーが最も使用しているかを知りたい場合は、サーバーに重い過負荷をかけることなく、どうすればよいですか?つまり、ユーザがそのサービスのページに行くと、つまり、http://foo.com/bar/nyancattastic2.phpというキーワード(アプリ名)が「bar」であることがわかり、その後、ユーザー名が 'bar'に一致する行を更新することでヒットを追加します'ヒット数=ヒット+ 1のデータベース内

これをすべてのページに配置すると、実際にはすべてのページの更新クエリでサーバーが破壊されます。

アイデア?あるいは、私は自分の好きなアプリが何であるかをユーザに尋ねることができますが、それはもっとUXの質問です。

大変助かりました!

乾杯、 カラン

編集*私は期待してトラフィックのレベルは、この提案変更せずに周り3-10クエリ/秒です!

ありがとうございます!

+0

私は1つのUPDATEステートメントはおそらくないと思うだろう世界が爆発する原因となります。あなたのサービスが何らかの結果をもたらした場合、彼らはすでに1つの更新以上のことをしています。 –

+0

あなたの負荷は本当にとても高く、トラフィックが重いのでINSERTを追加するとサーバが枯渇しますか?あなたはそれを一時的にしかやっていないのですか?また、ユーザーをランダムにサンプリングした場合はどうなりますか? –

答えて

1

これはあなたの負荷にもよりますが、更新フィールド=フィールド+ 1を実行すると、フィールドに暗黙のロックを行うため、数秒間に数回クエリが発生すると問題になることがあります。

トラフィックのレベルがある場合は、ログファイルに行を書き込んで処理したり、定期的に集計される行をmysqlテーブルに追加したりすることができます。もう一つのアイデアはWebサーバーのログを解析することです。

個人的にはこの更新フィールド+1で噛まれてしまいましたが、大量の国家サッカーのウェブサイトで使用しようとしたときに問題が発生する可能性がありますが、トラフィックが多い場合のみです。

マイケルの考えをチェックして、負荷が実際に高すぎる場合にユーザーをランダムにサンプルしてください。 1秒あたり3〜5回のクエリで、サーバーに依存することは心配する必要はありませんが、毎秒100回のクエリで問題が発生する可能性があります。あなたがトラフィックと負荷(私は問題を見るまで、私は心配ではないでしょう)、あなたが考えることができ、ランダムサンプリングのユーザーについては本当に心配している場合

+0

良い方法は、documentload、いいえにクエリを実行するだろうか?それは、ページを最初にロックするのではなく、ページをロックすることになるので、それはまだフィールドをロックすると思います。\現在のトラフィックのレベルは、毎秒約3-10クエリになると予想されます。 1〜2ヵ月で20〜30才です。私はおそらく、ログ解析をしなければならないでしょう:Sあなたの答えと同様の問題を経験してくれてありがとう! :) – Karan

+0

はい、AJAXを使用すると確実に問題が緩和されますが、ログファイル以外にそのポイントに達する場合は、INSERT DELAYED(呼び出しごとに1行)を使用してログを記録するためにMySQLを使用することもできます。次に、別のテーブルの値を圧縮するX分ごとにプロセスを実行します。高価な圧縮を使用してDBをロックするのを避けるために、時間あたりY行の圧縮を制限することができます。 – stivlo

1

私はあなたの質問に直接答えませんが、別の角度から来ています。

Google Analyticsを使用してデータを追跡し、analytics APIを使用して必要な情報を取得することができます。

http://code.google.com/apis/analytics/docs/

+0

私はそれについて考えていましたが、XMLデータを調べることは、データのライブアップデートよりもCRONの仕事になります。ちょっとしたことかもしれませんが、それは良い考えですが、おそらく失敗するでしょう!ハハ、あなたの答えをありがとう! :) – Karan

+0

いいえ心配@カラン興味深いプロジェクト、幸運のように聞こえる:-) –

+0

乾杯、アレックス:) – Karan

1

あなたは巨大なトラフィックレベルと一定の高いサーバーの負荷を扱っている場合を除き、私はあなたがそのような小さなコマンドを使用してサーバーを酷使についてあまり心配必要はないと思います。

+0

+1これ。 MySQLで単一のエントリを更新するのは非常に高速です。この更新がWebサーバーからの非ブロック的な方法で行われるようにしてください(つまり、ユーザーにページを提供する前にMySQLサーバーからの応答を待つ必要はありません)。 –

+0

@TrevorBurnhamより良い方法は、ドキュメントの読み込みでAjaxを使用するでしょうか?ありがとうございます:D – Karan

+0

@JHolyhead私のサーバーはかなり弱いです。 D:あなたの答えをありがとう:) – Karan

2

// Check about 1/5 users: 
$random_thresh = 5; 

if (rand() % $random_thresh == 0) { 
    // Log an insert for this user: 
} 
+0

彼は最も人気のあるサービスを見つけることにのみ関心があり、正確な数字はいいアイデアのようには聞こえませんし、とにかく絶対数も見積もることができます+1。 – stivlo

+0

これは非常に巧妙な解決策ですが、問題は各ユーザーにそれぞれの「最もよく使われているアプリ」を与えて、すべてのユーザーについて学ぶ必要があるということです。私が期待している負荷は、毎秒3~10問の間です。あなたの答えをありがとう!間違いなく将来の測量に使用します:) – Karan

関連する問題