簡體   English   中英

對同一組數據進行多次計算:ruby還是數據庫?

[英]Multiple calculations on the same set of data: ruby or database?

我有一個模型Transaction ,我需要在transactions子集的許多字段上顯示許多計算的結果。

我已經看到了兩種方法,但我不確定哪種方法最好。 當數據集增長和並發用戶數量增加時,我會追求性能影響最小的那個。

data[:total_before] = Transaction.where(xxx).sum(:amount_before)
data[:total_after] = Transaction.where(xxx).sum(:amount_after)
...

要么

transactions = Transaction.where(xxx)
data[:total_before]= transactions.inject(0) {|s, e| s + e.amount_before }
data[:total_after]= transactions.inject(0) {|s, e| s + e.amount_after }
...

編輯:where子句始終相同。

我應該選擇哪一個? (還是有第三種,更好的方法?)

謝謝,P

不要嘮叨,但是怎么樣

transactions = Transaction.where(xxx)
data[:total_before] = transactions.sum(:amount_before)
data[:total_after] = transactions.sum(:amount_before)

這看起來像的方法1和2 :)你重用的搜索結果,並采用更干凈的特定軌道,實力的工會sum聚合。

PS如果您在詢問是否可以依賴Rails緩存Transaction.where(xxx)查詢的結果,我不知道。 而當我不知道的時候,我寧願玩得安全。

你真的在談論可擴展性。

如果你正在談論數百萬行並且需要對它們進行計算,那么你認為哪一行會更快?

  1. 要求DBM匯總數百萬行並返回兩個數字。
  2. 通過網絡返回數百萬個查詢結果,您將迭代兩次。

在第一種情況下,您可以使用更快的CPU,更多RAM,更快的驅動器來擴展數據庫主機,或者定期預先計算您的值。 您想要在DBM中完成的計算正是它要編寫的事情。

在第二種情況下,您必須擴展計算主機,可能是連接DBM和計算主機的交換機,也可能是數據庫主機,因為它必須檢索和推送數據。 想象一下,當它處理數據時對網絡的影響,以及它在執行所有操作時對計算主機CPU的影響。

我會做第一個,因為它對我來說似乎更具可擴展性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM