0
我需要編寫一個始終返回整數值的方法。如果記錄不存在,該方法返回0什麼是更聰明的選擇:Ruby邏輯或SQL函數?
我有被查詢並有兩個解決方案來了個列的唯一索引:
# Option a) Ruby logic
def some_method id
result = Model.some_scope.find(:first,
conditions: { foo_id: id },
select: :int_value)
# Return 0 if record does not exist:
(result.nil? ? 0 : result.int_value)
end
# Option b) Allow Postgres to do the work
def some_method id
# sum() returns 0 if the record wasn't found
Model.some_scope.where(foo_id: id).sum(:int_value)
end
因爲獨特的指數,這兩種方法返回相同的價值。
除了簡潔之外,有沒有什麼理由說一種解決方案比另一種更好?
我的傾向是選擇基於服務器資源的解決方案,即通過將工作交給Ruby來最小化數據庫服務器負載。
運行的Ruby 1.9.3和Postgres 9.1
一致認爲,當你處理這種規模的工作時,負載只有沒有意義的區別。查詢設置和返回的開銷遠遠大於其他任何部分。如果您擔心性能問題,可以考慮在更高級別上彙總工作,以便一次向數據庫提交大量結果。 –