2013-02-15 43 views
2

我的基於MVC的應用程序掛鉤了一些發送大量數據的Web服務! 使用相同的,我呈現我的意見。網絡服務速度緩慢,超出了我的控制範圍。 所以我想在每個會話中存儲這些信息,但我擔心這會使我的Web服務器癱瘓。只有幾百個用戶,Web服務器將耗盡內存。每個會話存儲大量數據ASP.NET MVC

有沒有一種方法可以將會話數據存儲在每個會話的文件中?我更關注一些開箱即用的開源解決方案。

我歡迎,也有新的建議!

+1

但爲什麼你不想使用緩存? – Maris 2013-02-15 07:07:25

+0

@Maris:這個數據不會經常改變,但是使用這些數據的視圖會被渲染很多次! – Nauman 2013-02-15 07:32:42

+0

@Maris:緩存目前不是一種選擇,因爲數據是用戶特定的,Session在我看來是這類數據的合適人選。 – Nauman 2013-02-15 07:42:51

回答

2

您可以在會話存儲中存儲幾乎任何對象,但通常與在服務器場上運行相關的一些例外情況。然而,我將在這裏忽略這些情況。

如果您只處理幾MB的數據,將它存儲在Session對象(或緩存,如@Rick所示)並不一定是主要問題。從Web服務返回數據並將其解析爲您自己的內部數據結構後,只需將數據結構的根對象放入Session中即可。我經常使用這種方法來存儲需要很長時間才能運行的數據庫查詢的結果,特別是當查詢條件不太可能頻繁更改時。

對於較大的數據集,您應該使用數據庫來存儲信息。創建與您要返回的數據結構相匹配的表格,並以某種方式標記數據以指示它的年齡和獲取時使用的標準。根據需要進行更新,並在每個客戶端請求上查詢數據庫以獲取記錄。

還有很多其他選項,包括使用SessionID來創建臨時文件來存儲數據以識別它們,但我建議先調查數據庫選項。

+0

基於數據庫的解決方案是一種附加依賴性。我還沒準備好投資。但是,如果沒有其他的工作,我可能會被迫去這樣! :( – Nauman 2013-02-15 07:45:02

+1

目前數據庫非常普遍,我不認爲它們是一個問題,你可以使用類似[csharp-sqlite](http://code.google.com/p/csharp-sqlite /),如果你不想通過設置一個完整的SQL服務器數據庫。 – Corey 2013-02-15 08:14:41

1

緩存是你的朋友。而且由於您使用MS技術,您可能需要查看一下the Cache Class

+0

緩存也會有相同的問題,除非它不在內存中!另外,這些數據是用戶特定的!所以,在我看來,會議效果最好。但是大數據是我關心的問題。 – Nauman 2013-02-15 07:34:54

+0

那麼?使用用戶/會話作爲緩存鍵並選擇內存/磁盤作爲數據存儲。它仍然被稱爲緩存。 – Rick 2013-02-15 09:49:50

0

您可以將結果集合序列化並將其作爲xml保存在文件中(甚至可以直接使用來自XML的linq/XPath進行處理),也可以使用任何.net本地xml數據庫來存儲和保存文件上的數據。