0

データベースへの SQL クエリの数を減らすために、データベースからいくつかのデータをキャッシュしようとしています。現在、私がやっていることは、データベースから一連のレコードをロードすることです:

@records = Record.find(:all, :conditions => ["id < ?", 100])

次に、この配列を反復処理して、本当に必要なレコードを見つけます。

@needed_records = Array.new
@records.each do |record|
  if record.is_needed
    @needed_records.push(record)
  end
end

そのため、必要なときはいつでも、実際にデータベースにアクセスする代わりに @records を渡すことができます。

私の質問は、この方法で何か欠点はありますか? 同等のことを行うより良い方法はありますか?

4

1 に答える 1

0

私がお勧めする2つの方法:

1) より良い方法は、条件とスコープを使用して、探している実際のデータをフィルター処理することです。レコードをプルして手動で反復するのではありません。これは、「record.is_needed」を条件または SQL に変換して、目的の結果を取得できることを前提としています。

2) Rails の Cache Store を使用して、DB からの結果を保存します: http://guides.rubyonrails.org/caching_with_rails.html#activesupport-cache-store

Rails.cache.write(:records, @records)

データベースはクエリされるのが大好きです...彼らはそれに乗り出します!

于 2012-11-05T22:04:34.523 に答える