2012-04-17 7 views
2

私はデータベースにたくさんのデータを持っており、それらから統計を作りたいと思っています。たくさんのデータ=テーブルの何千もの行、私は毎日、毎週、月ごと(毎月)の統計情報を取得したいと思います。Rails - ユーザーが私のページに来たとき初めてメソッドを実行する方法

問題は、これらのデータを取得するには時間がかかることです(それほどではありません)。

だから、私はそれを得るための最速、最も鮮明とちょうど最も効果的な方法がどうなるかと思います...

私の最初のアイデア - ユーザーが自分のアプリケーションに来て、私は「ApplicationController方法でDBの統計情報からフェッチし、セッションの変数に入れたオブジェクトを保存してから、これらの変数をソースとして使用します。その後、私はアプリのどこかに統計情報を印刷する必要があるとき、私はちょうどこの読み込まれたデータを使用します。

質問は:これはいい考えですか?または、より良い方法が存在する?

+0

memcachedやredisに入れて使うことができるかもしれません – Amar

答えて

0

をキャッシュするためのサポートのmemcached

に保存することができます。一部のユーザーの関連レコードは、その後、彼の統計に影響を与える使用している場合

- cache [@user, :stat] do # or [@user, :stat, :daily] 
    statistic for the user @user 

:あなたは、ユーザーごとにこの方法を、ページの一部をキャッシュすることができます

# SomeModel.rb 
belongs_to :user, touch: true 

モデルの関連する際、ユーザーのupdated_atが更新されます。この方法オブジェクトが変更され、ユーザーのキャッシュは自動的に古いものとして扱われ、- cache ... do内のブロックが実行されます。このブロックの外側にdbヒットがないことを確認してください(例:コントローラにModel1.where(条件).allを使用しないでください) 。

開発モードでキャッシュを有効にするには、config/environments/development.rbにアクセスし、trueパラメータconfig.action_controller.perform_cachingに変更してアプリを再起動します。

関連する問題