0
我有一種情況,其中在查找表中有幾百條記錄。 經常在代碼中,我必須使用表來查找傳入的值。是否在散列或模型中做到這一點
每個這樣的查找都會導致數據庫行程。然而,優化後,這將是I/O方面的一些成本。 我在想,我不應該把所有東西都放在哈希中。從而減少了數據庫跳到只有一個。
由於它有幾百條記錄,我認爲哈希上的內存消耗不應該是一個殺手。
尋找意見?最佳實踐?經驗?
我有一種情況,其中在查找表中有幾百條記錄。 經常在代碼中,我必須使用表來查找傳入的值。是否在散列或模型中做到這一點
每個這樣的查找都會導致數據庫行程。然而,優化後,這將是I/O方面的一些成本。 我在想,我不應該把所有東西都放在哈希中。從而減少了數據庫跳到只有一個。
由於它有幾百條記錄,我認爲哈希上的內存消耗不應該是一個殺手。
尋找意見?最佳實踐?經驗?
一次一個地看着它們是不必要的浪費。你可能沒有注意到你處理的小數字帶來的浪費,但是壞習慣是壞習慣,好習慣更好。
您應該加載單個數據庫匹配所需的所有條目。如果你需要它們作爲對象,那麼對象的一個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,這樣的東西幾乎沒有什麼區別。
像往常一樣,具體實施取決於您的要求。但不要害怕向收集和按摩特定數據集合的模型添加方法。
謝謝,它的工作。 – Gyan