2015-11-29 52 views
1

我在SQL Server中設計了超過400個表的會計應用程序。在.Net中緩存大量數據可以接受嗎?

大約10%的表格是操作表格,其他表格用於解碼和參考信息。

例如,Invoice表(Master和details)使用大約10個表來解碼像買方,物品,營銷人員等信息。我想知道是否可以在asp.net緩存中緩存解碼錶並且不從SQL Server查詢它們(我知道緩存項的更改也應在SQL Server上提交)。並使用緩存項目進行解碼?

我認爲它比普通應用程序快得多。

也許他們在一起(高速緩存表)在幾年後約爲500 MB,因爲它們不會頻繁更改。

+2

sql server有自己的緩存.....對於大多數人來說,一個設計良好的數據庫不會很慢,除非你正在錘擊它。 –

+0

@KeithNicholas我知道sql server有。但如果我使用SQL服務器緩存,我必須收集所有操作數據與解碼信息。這種情況有兩個代價:1-在sql server中加入表。 2-從sql server到應用程序服務器的數據傳輸大小 – Amir

+1

@Keith,+1,並且,如果您將具有數千,數萬(會計應用程序?數百萬?)行的內存中的表緩存爲數據,則可以使應用程序變得更慢表並通過DataTable.Select()訪問它。 [見這裏的指標](http://stackoverflow.com/questions/3298167/datatable-select-and-performance-issue-in-c-sharp/33385906#33385906) –

回答

3

如果你有內存,那麼可以使用500 MB。

但是,除非現在有性能問題,否則緩存只會導致問題。不要修復您未遇到的問題,設計性能並僅在出現問題時進行優化 - 否則優化會導致解決更多問題。

所以我建議通常最好確保你的查詢是優化和結構良好的,你有正確的索引在表上,併發出最少量的查詢。

儘管500MB緩存的數據並不多,但所有應有的尊重,通常SQL Server會比您更好地執行緩存 - 只要您正確使用它即可。

使用緩存總是會提高性能;代價是更高的實施複雜性。

對於永不改變緩存的靜態數據是有用的;但它仍然需要在線程之間加載和共享,這本身就可以帶來挑戰。

對於很少發生變化的數據,它變得複雜得多,因爲它可能已經發生了變化。如果一個應用程序(進程)是緩存的唯一更新,那麼它不是那麼困難,但仍然不是一個簡單的任務。


我已用了個優化離線批量處理系統(其中代碼具有對數據庫的一段12小時的完全控制)。部分優化是使用各種緩存和數據重新映射。所有的緩存都是隻讀的。內存使用量在執行期間大約爲10GB,數據庫大約爲170GB,6000萬條記錄。

即使進行緩存,底層架構也發生了相當大的變化,以提高效率。只讀緩存將在處理期間消除讀取;以允許多線程處理並提高插入性能。

處理速度已經從20個月前的每秒處理6個項目變爲每秒約6000個項目(昨天) - 但真正需要這種優化,因爲要處理的項目數量已從10萬增加到800萬在同一時期。

如果你沒有需要,那麼不要優化。