我正在使用Ruby on Rails 3.0.7,並試圖最小化數據庫擊中。爲此,我從數據庫中檢索與User
相關的所有對象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.S .:用幾句話,我想要做的是在ActiveRecord::Relation
(一個數組)上工作,但調用它的where
方法接近數據庫。
如果你真的在做* *搜索,就像你提到的那樣,你應該使用像Solr這樣的搜索特定的解決方案。與RDBMS或應用內解決方案相比,他們在處理此問題方面要好得多。 – coreyward
我不知道是否有這種情況,但要小心過早的優化,從我的atciverecord的經驗來看,通常只要你有適當的索引,你通常會把大部分時間用在ruby代碼中,而不是數據庫中。 – Schmurfy
@Schmurfy - 你能更清楚嗎? – user502052