2011-12-23 43 views
1

我想執行一些簡單的計算,同時在我的Rails應用程序中保持數據庫不可知性。DB不可知計算:存儲計算結果是否好?如果是,有什麼更好的方法來做到這一點?

我有三個型號:

.---------------.  .--------------.   .---------------. 
| ImpactSummary |<------| ImpactReport |<----------| ImpactAuction | 
`---------------'1  *`--------------'1   *`---------------' 

Basicly:

  • ImpactAuction持有約...拍賣(價格,數量和這樣的)數據。

  • ImpactReport擁有許多拍賣以及其他屬性的月度報告;它還顯示了一些基於拍賣的計算結果。

  • ImpactSummary包含一組報告以及一些關於特定年份的信息,還顯示了基於另外兩個模型的計算結果。

我打算做的是存儲的相關表格中這些非常簡單的計算(只是意味着,資金等)的結果,因此,閱讀這些將是快速的,並且在某種程度上我可以輕鬆地對計算結果執行查詢。

  1. 存儲計算結果是否很好?我很確定這不是一件好事,但它可以接受嗎?

  2. 它是有用的,或者我應該不打擾和執行計算在飛行?

  3. 如果這是良好的做法和有用的,有什麼更好的方式來實現我想要的?

那就是棘手的部分。 首先,我實現了一個簡單的回調鏈,它可以在保存時更新父模型的計算字段(也就是說,當創建或更新拍賣時,它會在其報表上標記some_attribute_will_change!並保存它,這會觸發它自己的回調等)。

這種方法在創建/更新單個記錄時很合適,但是如果我想處理多個記錄,它將觸發整個鏈上的計算,以記錄每條記錄......所以我突然發現自己被迫放了一個條件在回調...取決於如果我有一個或多個記錄,我不知道如何(使用可以調用關係的類方法?在每個記錄上使用實​​例屬性@skip_calculations?只是使用outdated字段以標記父記錄以供以後計算?)。

歡迎任何建議。

獎金問題:如果我用數據庫視圖實現這一點,會被視爲DB不可知論嗎?

+1

存儲似乎矯枉過正,但緩存可能適合 – apneadiving 2011-12-23 15:19:08

+0

是的,我想過這個。我對緩存並不是很熟悉,你知道關於這個的很好的「noob doc」嗎?此外,它不會幫助我以數據庫不可知的方式查詢結果......如果我需要選擇計算標準的摘要,會發生什麼情況? – 2011-12-23 15:23:55

+0

好吧,我會試試這個。只是繼續學習:D – 2011-12-27 13:01:57

回答

0

像往常一樣,這取決於。如果你可以在數據庫中執行計算,使用視圖或使用#find_by_sql,我會這樣做。你將爲自己節省很多麻煩:當你改變數值時,你必須保持你的總結是最新的。更新多行時,您已經遇到了問題。擁有一個視圖或一個實現在ImpactReport中以文本形式存儲視圖的查詢將允許您始終擁有新的數據。

答案?基準,基準,基準;)

+0

以下@ apneadiving的建議,我試圖使用緩存動態計算以及'包括'查詢來限制數據庫負載。我已經使用複雜的SQL查詢實現了類似的邏輯,但它不會感覺到「軌道方式」......我們將看到基準測試所說的內容! 謝謝你的時間。 – 2011-12-27 13:00:13

相關問題