2012-01-23 56 views
2

在我建立的在線訂票系統中,我需要爲客戶添加訂單的實時分析報告。使用非規格化數據庫表進行分析數據

重要的訂單數據分爲多個表格(客戶,訂單,line_items,package_types,票據)。每個表格都包含對我的客戶可能需要的任何報告都不重要的附加數據。

我正在考慮在非規格化報表中將每個訂單記錄爲單獨的訂單項。我試圖弄清楚這是否合理。

通常,我爲報表運行的查詢只需要一次連接兩個或三個表。每個表格都添加了適當的索引。

將所有訂單數據編譯成只包含必要的報表列的表是否有意義?

該應用程序建立在Ruby on Rails 3上,DB是Postgresql。

編輯:這樣做的目標是儘可能快地爲用戶呈現瀏覽器中的數據。

+0

從規範化數據獲取報告的速度有多慢? – Mark

+0

我還沒有做過任何確切的基準測試,但只需計算從開始請求到完成時的秒數,大約需要20秒或更長時間才能從規範化數據呈現頁面。這比我想要的要長一點。 –

回答

2

取決於你的目標是什麼。如果你想讓報表輸出更快顯示,那肯定會奏效。權衡是通過批量更新來維護數據。您可以編寫一個觸發器,在任何時候新的記錄進入基表時更新表,但這可能會增加很多開銷。

也許一個視圖而不是一個新表是一個更好的解決方案在這種情況下?

+0

是的,我的目標是儘可能快地爲用戶呈現數據。要更新非規範化表,我很可能會在我的Order模型中使用:after_create回調。它會開始一個後臺作業來更新order_data表。我不確定如何讓Postgres視圖與Rails應用程序一起工作,但我會研究。感謝您的建議。 –

+1

不熟悉Postgress,但對於任何其他數據庫,您可以像訪問表一樣訪問視圖。性能明智的是,除非數據庫緩存被優化,否則速度不會更快。彙總表會更快我認爲 – Brian

+1

視圖可能不會比表格更快,但物化視圖將會是... – courtsimas