2009-08-05 11 views
4

私は集計を表示したいコレクションを持っています。アイデアは必要な合計ごとにキャッシュを使用することでした。しかし私はまた、データセットにドリルダウンする必要があります。とにかくコレクションをロードする必要があります。だから私はまだキャッシュを使用するか、単に計算を使用する必要がありますか?Railsカウンタキャッシュと計算

答えて

3

答えはコレクションのサイズによって異なります。コレクションが非常に大きい場合(1000'sまたはitems)、キャッシングはおそらく良い考えです。そのほんの一握りで、関連する行をすばやく見つけるための索引がテーブルにある場合は、特にキャッシュにドリルする必要がある場合は、おそらくキャッシュは必要ありません。

これらのすべての種類の質問と同様に、正解は通常「それに依存する」です。あなたの要件やデータなどに大きく左右されます。

+0

に51個のクエリを崩壊することはまあ各コレクションは、より多くの可能性が高い50、1000の下である可能性が高いです-200行。私は一番簡単な方法を試してみようと思います! – Cameron

3

Stephen ODonnellは「コレクションのサイズに依存します」と述べています。ただし、この計算をページで行う場合は、回を考慮する必要があります。たとえば、Blogアプリケーションを実行していて、投稿/インデックスページに10個のブログ投稿が表示されていて、それぞれ下部に「155コメント」がある場合は、カウンタキャッシュを使用して回避できるデータベースコールがたくさんあります。

アクティブなレコードの検索だけで試してみることをおすすめしますが、 "include"オプションを追加してください。 Post#123に50のコメントがあるとします。

p = Post.find_by_id(123) 
p.comments.each do {|c| puts c } #Do something meaningful instead... 

51個のデータベース呼び出し、1個のポスト、1個の各コメントが生成されます。代わりに、あなたが行うことができます:あなたはポストを検索したときに自動的にコメントを照会します

Post.find_by_id(123, :include => [:comments]) 

は今、1