2012-02-20 24 views
0

我們擁有一個每月收集大量數據並進行相當先進的計算的系統,可以進一步增加數據庫。由於我們有客戶的要求,三年前我們需要存儲數據以實現快速訪問,並且我們必須能夠訪問較早的數據(最多十年),但這可能會導致性能低下並需要一些工作。我們希望避免數據庫及其表格不成比例增長的性能問題。是否有可能使用Nhibernate將對象分區到多個表中?

在討論過使用SQL Enterprise之後(由於我們還沒有掌握專有技術,所以成本很高,而且有很多陷阱),並且由於我們的系統有很多可以相互引用的表,所以我們傾向於創建一些歷史表我們以月度方式移動數據,並根據具體情況重新編寫基於參數的選擇查詢,以便在常規表格或歷史記錄中或兩者中進行搜索。

因爲我們也在使用NHibernate進行映射,所以我想知道是否可以創建一個映射文件來處理它自己(幾乎)使用某種polymorfism或繼承,其中每個對象存儲在不同的表中基於參數?

我知道這聽起來很複雜,陌生的,並且有其他的方法來執行這一點,但我這個問題,我寧願讓人們回答提出的問題,而不是給其他sugestions改爲使用。

回答

0

據我所知,NHibernate不能做到這一點(每個類可以映射到一個表/視圖),但你可以使用SQL查詢或StoredProcedures(取決於你使用的NHibernate版本)填充映射對象。 在你的情況下,你可以通過創建不同表的聯合來創建組合視圖然後你可以使用SQL查詢來填充你的實體。 還有另一種解決方案可以爲使用該視圖的查詢創建摘要對象,因此您可以同時使用HQL和條件來查詢此對象。

+0

我在想,有可能映射相同基類的兩個對象,每個被映射到diffent表,我們可以創建一個指定的子類,我們真正想要得到的查詢。 – 2012-02-20 15:35:02

+0

這意味着你必須有兩種不同的類型並分別使用它們來查詢你的數據。除非你爲基類提供了一個單獨的表格來顯示在哪裏查找每條記錄,你不能使用基類來查詢。 – Beatles1692 2012-02-20 15:41:18

0

簡答題「不」。當你提到很多加入時,我不會創建視圖。

個人而言,我會創建彙總表,並映射這些直接使用無狀態會話或對類定義最起碼mutable=false來。將這些彙總表視爲僅用於報告的非規範化數據。唯一的缺點是如果歷史數據定期更改,則彙總表也需要更改。如果歷史數據永遠不會改變,那麼這應該很容易實現。

我也最有可能存儲在另一個目錄中,這些彙總表,而不是添加到當前系統的大小。

它不是一個快速贏得這一個我害怕。

相關問題