2012-07-30 109 views
0

我期待爲.net web窗體中的一系列字段創建智能感知,這將使用戶能夠單擊其中一個選項,然後將填充一系列字段(名稱,地址等)。這對於使用c#.net和ajax來實現是非常簡單的。然而,最近我被迫加密了一些正在搜索數據庫的關鍵字段,所以現在這個功能被破壞了。我們解密這些可搜索字段的唯一方法是使用C#.net。將大型數據集存儲在內存或客戶端

爲了解決這個問題,我想到了: a)當頁面加載時,抓取所有記錄並將其存儲在數組中(未加密),並且用戶在搜索字段中鍵入linq或拉姆達獲取感興趣的記錄。 b)加載頁面時,將所有記錄存儲在js數組中(未加密)並執行搜索客戶端。

對於我的web服務器和客戶端的瀏覽體驗,哪一條最適合性能考慮?

我在想這會是< 100k條記錄。

+0

在搜索之前不能加密相應的密鑰嗎?即。你可以搜索'name ='02h37xsdfh5h5h23h34h''或者其他任何類似於db – Daniel 2012-07-30 14:07:00

+0

的搜索名稱,而不是搜索'name ='smith''。他們可能用於完全匹配,但可以說有人輸入'smi'。 – jreed350z 2012-07-30 14:23:38

+0

好吧,我認爲這是查詢全鍵,我的不好 – Daniel 2012-07-30 19:20:21

回答

1

爲什麼不將記錄存儲在服務器緩存中併發出ajax請求。這樣做將使記錄集可供所有用戶使用。

+0

但你如何確保記錄是最新的。你仍然需要刷新每個用戶,對吧? – jreed350z 2012-07-30 14:26:59

+0

http://stackoverflow.com/questions/1434284/when-does-asp-net-remove-expired-cache-items – Nathan 2012-07-30 15:10:45

1

哇,所以這是加密的動態數據。

在每個頁面加載時向客戶端發送大量記錄會很慢。

您可能會使用動態緩存,每隔幾秒加載一次數據。

1

每一行有多大? 〜100k行可以是很多數據。

客戶端上的客戶端

100K上是大量的數據,即使是數據的一對夫婦列。這只是數據,然後是搜索它的問題。這是桌面瀏覽器的問題。它會殺死一個手機瀏覽器。

在服務器

這是更合理的。

需要考慮的事情:

  • 多少內存將加載所有結果存入內存消耗?
  • 將所有記錄加載到內存中的延遲(網絡,數據庫)是什麼?也許它可以做到異步,以減輕對用戶的影響。
  • 在C#中搜索可以很快,特別是在使用字典時,它不如數據庫快。您是否考慮過只將需要解密的數據存儲在內存中,並將剩餘的數據留在數據庫中。需要時從數據庫中獲取其餘數據?

Ajax仍然是可能的(假設數據存儲在服務器上)。您必須將搜索請求路由到正確的商店(在內存,數據庫或兩者的混合中)。

+0

我喜歡你的想法,只存儲需要解密的數據,並有一個ID列指向有問題的記錄。我會做一些測試,看看會消耗什麼類型的延遲和內存,然後我想通過每日平均使用量來乘以。我也很好奇使用服務將這些記錄加載到共享緩存中。我認爲,即使記錄只是每天刷新1次或2次,也足夠了。 – jreed350z 2012-07-30 15:46:24

+0

當然,我想我需要檢查一下商業方面,以確認刷新頻率需要多少。 – jreed350z 2012-07-30 15:48:04