わかりました、私はあなたのために3つのアプローチを持っています:
1) キュー
AJAX ハンドラーで、クエリ パラメータをキューにプッシュするための最も簡単な方法 (Rack ミドルウェアまたは Rails Metal を使用) を記述します。次に、キューをポーリングしてメッセージを収集します。
ラック ミドルウェアからのキュー プッシュは、非常に高速です。同様のデータを記録するために、非常にトラフィックの多いサイトでこれを使用します。
ラック ミドルウェアの例を以下に示します (アプリから抽出したもので、2 ミリ秒未満でリクエストを処理できます。
class TrackingMiddleware
CACHE_BUSTER = {"Cache-Control" => "no-cache, no-store, max-age=0, must-revalidate", "Pragma" => "no-cache", "Expires" => "Fri, 29 Aug 1997 02:14:00 EST"}
IMAGE_RESPONSE_HEADERS = CACHE_BUSTER.merge("Content-Type" => "image/gif").freeze
IMAGE_RESPONSE_BODY = [File.open(Rails.root + "public/images/tracker.gif").read].freeze
def initialize(app)
@app = app
end
def call(env)
if env["PATH_INFO"] =~ %r{^/track.gif}
request = Rack::Request.new(env)
YOUR_QUEUE.push([Time.now, request.GET.symbolize_keys])
[200, IMAGE_RESPONSE_BODY, IMAGE_RESPONSE_HEADERS]
else
@app.call(env)
end
end
end
starlingをお勧めするキューについては、私はそれで楽しい時間を過ごしました。
解析の最後には、スーパーポーラーツールキットを使用しますが、私はそれを書きました。
2) ログ
すべてのパラメーターをクエリ パラメーターとして静的ファイル (/1x1.gif?foo=1&bar=2&baz=3) に渡します。これはレール スタックにヒットせず、目がくらむほど高速になります。
データが必要な場合は、ログ ファイルを解析するだけです。
これは、最適なスケーリング ホーム ブリュー アプローチです。
3) Google アナリティクス
グーグルがあなたのためにそれをするのに、なぜ負荷を処理するのですか?自作する前に、Google アナリティクスの優れた機能に驚かれることでしょう。ぜひチェックしてみてください。
Google はあなたよりも早くサーバーを購入するため、これは無限に拡大します。
私はこれについて何年も怒鳴ることができましたが、今行かなければなりません。お役に立てれば!