好吧,我正在研究一個ASP MVC Web應用程序,它可以從SQL Server 2008查詢相當大量的數據。應用程序啓動時,用戶會看到一個包含多個字段的搜索掩碼。使用搜索掩碼,用戶可以搜索數據庫中的數據,也可以通過在掩碼中指定參數來過濾搜索。爲了加速搜索,我將數據庫查詢返回的結果集存儲在服務器會話中。在隨後的搜索過程中,我可以搜索會話中的數據,從而避免不必要的訪問數據庫。在ASP MVC應用程序的服務器會話中存儲大量數據的最佳選擇是什麼?
由於數據庫查詢可返回的數據量可能非常大,因此Web應用程序的可伸縮性受到嚴格限制。比方說,如果有100個用戶同時使用該應用程序,那麼服務器會爲每個單獨的用戶在其會話中保留搜索結果。這最終會消耗相當多的記憶。我現在的問題是,在會話中存儲數據的最佳選擇是什麼?數據庫中的查詢可能需要相當長的一段時間,因此目前我希望避免必須在後續搜索中運行查詢,前提是已經檢索到的數據包含正在搜索的數據。我考慮過的選項是在我的搜索查詢中的數據庫中創建一個臨時表,用於存儲檢索到的數據以及可用於後續搜索的數據。問題是,我沒有太多的SQL Server經驗,所以我不知道如果有多個用戶執行搜索,SQL Server是否會爲每個用戶創建臨時表。還有其他的可能嗎?可以使用SQL Server中的臨時表進行工作,還是隻會導致SQL Server上的內存問題?謝謝您的幫助! :)
編輯:非常感謝您的幫助和洞察力的答案,傢伙!但是,我沒有提到一個重要的細節。當我查詢數據庫時,結果集的格式可能因用戶而異。這是因爲用戶可以通過從搜索掩碼中的預定義多選框中選擇列來決定結果表可以具有哪些列。如果用戶A想要在他的結果表中顯示ColA,ColB和ColC,他將從搜索掩碼中的多選框中選擇這些值。然而,用戶B可能僅選擇ColA和ColC。因此,將結果緩存到所有用戶的單個表中可能會有點棘手,因爲對於所有用戶而言,表列不一定是相同的。因此,我在想,我幾乎不得不使用另一種方法來單獨保存每個用戶的緩存表。下面提到的HTML5本地存儲替代選項聽起來很有趣。由於這是一個Intranet應用程序,因此假設(或要求)用戶擁有支持HTML5的最新瀏覽器可能是公平的。你們有什麼感想?再次感謝您的幫助:)
非常感謝您的提示。但是,我的產品是針對客戶公司的,我無權更改其數據庫。 – cbbcloud