我目前正在爲存儲在MSSQL數據庫中的數據製作報告工具。 該數據庫是巨大的,因爲它是一個生產數據庫,我不是它的所有者,我不能擴展任何功能(添加表/函數等)。計算報告數據 - C#通過集合或SQLite
爲了得到我的報告編號,我需要使用昂貴的查詢(遊標),同時我不想對數據庫造成不必要的壓力。這也是相當複雜的東西,如分析庫存移動和用法,而不僅僅是簡單的總和和計數。
所以我目前的做法是使用單個查詢以小塊加載數據,將它們加載到集合中,然後運行幾個foreach迭代來計算報告的數據。 基本上我正在重建內存中的數據庫,然後我計算。
我目前在那裏有相當多的代碼(和DB中的實體對象),我開始認爲這可能是一個更好的解決方案,通過通過創建必要數據的本地簡化副本例如一個單獨的SQLLite-DB。
我也考慮linq的對象,但基本上我仍然需要創建和填充對象... 而數據庫甚至可以給新的報表創建新的查詢,而不是硬編碼他們的能力。 在另一方面,它可能會慢於做所有類別...
所以,問題(最終):那你覺得,那會是更好的 手動複製的簡化和縮小版數據到本地數據庫,或者你會與其他解決方案?
問題:您能否提供更多關於「巨大」的含義的信息?你實際需要查詢多少個表/記錄?什麼是源數據庫?它是否在與您正在編寫的應用程序代碼不同的機器上運行?您是否有證據表明運行數據庫的服務器無法承受報告的性能影響?你是否100%確定你需要做的事情不能在沒有遊標的情況下完成? – 2011-06-10 16:35:37
我問,因爲根據我的經驗,報告輸出很少需要光標。如果構建正確,SQL查詢可能非常強大,而RDBMS優化器幾乎總是能夠更有效地利用CPU週期,而不是自己複製數據並進行處理。 – 2011-06-10 16:37:25
按照這個想法,如果您必須從RDBMS中卸載數據,並且數據量確實很大,那麼我建議您使用本地數據庫,而不是嘗試自己管理存儲。 – 2011-06-10 16:38:54