2011-07-31 30 views
0

我有一種情況,其中在查找表中有幾百條記錄。 經常在代碼中,我必須使用表來查找傳入的值。是否在散列或模型中做到這一點

每個這樣的查找都會導致數據庫行程。然而,優化後,這將是I/O方面的一些成本。 我在想,我不應該把所有東西都放在哈希中。從而減少了數據庫跳到只有一個。

由於它有幾百條記錄,我認爲哈希上的內存消耗不應該是一個殺手。

尋找意見?最佳實踐?經驗?

回答

1

一次一個地看着它們是不必要的浪費。你可能沒有注意到你處理的小數字帶來的浪費,但是壞習慣是壞習慣,好習慣更好。

您應該加載單個數據庫匹配所需的所有條目。如果你需要它們作爲對象,那麼對象的一個​​Set(或將它們的ID映射到該對象的散列)將是有意義的;如果你只需要知道,如果存在的話,那麼一個方法添加到模型是這樣的:

def self.valid_ids_from(ids) 
    # Ask the database which things in the `ids` array it has 
    # and put those in `ids_that_are_there`. 
    Set.new(ids_that_are_there) 
end 

然後,你可以做這樣的事情:

known_ids = Pancake.valid_ids_from(incoming_ids) 
good, bad = incoming_ids.partition { |x| known_ids.include?(x) } 

你可以使用一個Hash,如果你不喜歡Set,這樣的東西幾乎沒有什麼區別。

像往常一樣,具體實施取決於您的要求。但不要害怕向收集和按摩特定數據集合的模型添加方法。

+0

謝謝,它的工作。 – Gyan

相關問題