私はRuby on Rails 3.0.7を使用していますが、データベースのヒットを最小限に抑えようとしています。それを行うために、私はに関連するすべてのArticle
オブジェクトをデータベースから検索し、検索されたオブジェクトに対して検索を実行します。パフォーマンス:データベースのヒットを最小限にする
私は何がある:
stored_objects = Article.where(:user_id => <id>) # => ActiveRecord::Relation
<some_iterative_function_1>.each { |...|
stored_object = stored_objects.where(:status => 'published').limit(1)
...
# perform operation on the current 'stored_object' considered
}
<some_iterative_function_2>.each { |...|
stored_object = stored_objects.where(:visibility => 'public').limit(1)
...
# perform operation on the current 'stored_object' considered
}
<some_iterative_function_n>.each { |...|
...
}
stored_object = stored_objects.where(:status => 'published')
コードは本当に(私のログファイルには、each
の反復のためのデータベースクエリを実行し、まだ縫い目ので、私はこれを聞いて)データベースをヒットに避けることができますか?いいえの場合、データベースのヒットを最小限に抑えるにはどうすればよいですか?
P .:いくつかの言葉で、私がしたいのは、ActiveRecord::Relation
(配列)で作業することですが、where
メソッドはデータベースにヒットするために継ぎ目をつけました。
上記のように*検索を実際に行っている場合は、Solrのような検索固有のソリューションを使用する必要があります。 RDBMSやインアプリのソリューションよりも、これを処理する方がはるかに優れています。 – coreyward
私はそこにあるかどうかはわかりませんが、atciverecordを使った私の経験からは、あなたが適切なインデックスを持っている限り、通常はルビコードでほとんどの時間を渡します。 – Schmurfy
@Schmurfy - あなたはもっと明確になりますか? – user502052