2013-02-14 57 views
1

我想知道最佳做法是存儲計數/總和等是什麼?正在計算在每一頁上的飛行載入大不不?最佳數據庫實踐計數/總和等

我有一個Rails應用程序,其中包含來自多個來源的產品和銷售報告。這些銷售報告中的一些可以延伸到每天10萬行以上。目前,我們正在爲每個頁面加載速度進行計算。這顯然非常緩慢。

由於銷售報告幾乎肯定是一次寫入,但多次閱讀,最好是在我的產品表中添加一個總和列,並在每次寫入新的銷售額時增加一個總和列。我可以看到這將明顯快得多,但它嚴重限制了我提供日期過濾的能力; '過去7天中的前10名'等。

是否會啓用過濾的另一個解決方案是創建每個產品每日總計的第三個表?主銷售表可以包含多個產品,有時每個產品每天有數千個產品線,因此我可以再次看到主銷售表的精簡版如何加快速度。

我應該使用before/after_save回調/在導入期間進行這些計算,還是應該看看計劃任務在後臺運行?

任何人都可以提供一些建議或推薦閱讀,以幫助我設置正確的路徑,並幫助我改善我的尷尬緩慢的頁面加載時間?

在此先感謝!

+0

不完全是一個答案,但這種應用程序會從[商業智能/ OLAP方法](http://en.wikipedia.org/wiki/Online_analytical_processing)中受益匪淺。不幸的是,AFAIK沒有太多的實現MDX的開源工具;最着名的是[Pentaho Mondrian](http://mondrian.pentaho.com/documentation/olap.php) – 2013-02-14 11:15:44

回答

1

偉大的問題。

通常我認爲從動態生成計數和總和開始是件好事。這跟隨Codd的規則等等。問題在於隨着時間的推移,這可能會變得緩慢。你如何處理它將取決於很多事情。我會爲您提供處理銷售數據的解決方案,以及爲什麼我認爲這是理想的。

銷售數據非常重要,因爲雖然有時會在短時間內調整它,但它不會再進行調整,但不會再出現犯規行爲(這是書籍關閉後)。銷售書籍通常每月或每年關閉。

你可以做的就是把聚合放在一個關閉的日期或最大ID或類似的條目,並放入觸發器,以便確保沒有條目被添加到封閉時間段。這使您可以從已知的良好價值中滾動您的聚合。在這種情況下,您可能只會在關閉期間或過期時段之間進行彙總。

+0

+1用於考慮簿記方面。 – 2013-04-26 14:59:05