2015-02-12 83 views
1

我在我的sql數據庫中有三個表格說特價,企業,評論。在我的母版頁中,我有一個提示區域,在每次刷新頁面期間(這些表格有超過1000條記錄),我需要根據特定條件顯示這3個表格中的替代數據。那麼在那種情況下,從這些表中檢索數據的最佳選擇是什麼?如何在.net應用程序中管理頻繁的數據訪問?

每次從數據庫訪問數據不是一個好主意,我知道,有沒有其他好的方法來做到這一點,如緩存或任何其他新技術來有效地管理這一點。現在每次刷新頁面後都需要花費太多時間來加載頁面。

請給出您的建議。

目前我所計劃的是創建一個用於數據檢索的SP並保持會話中返回的值。

這樣我們就可以從這個會話中訪問數據,而不是每次都在頁面刷新時轉到數據庫。但不知道是否有其他有效的方法來實現這一目標。

回答

0

一個建議是將您的數據庫視爲僅存儲庫以保持狀態。您的應用程序層可以緩存業務對象的集合,在它們更改時保留它們,並立即將狀態返回到表示層(網頁)。

這裏假定數據的所有更新都來自您的頁面。如果數據庫正從不同的地方填充,則需要將所有內容綁定到通用應用程序層,或輪詢數據庫以更新緩存。從數據庫中每個時間

+0

謝謝埃德,目前我的計劃是創建一個SP的數據檢索,並保持在會話中返回的值。這樣我們就可以訪問該會話中的數據,而不是每次刷新頁面時都訪問數據庫。但不知道是否有其他有效的方法來實現這一目標。 – 2015-02-12 04:18:58

3

訪問數據是不是一個好主意

它並非總是如此,這取決於如何頻繁的數據得到改變。如果您選擇緩存數據,則每次數據更改時都必須重新驗證它。我假設你不想顯示一個靜態計數或一旦顯示的東西不會改變。如果情況並非如此,您可以簡單地存儲cookie並從那裏顯示。

現在每次刷新頁面後都需要花費太多時間來加載頁面。

你知道什麼需要太多時間嗎?它是客戶端代碼還是服務器端代碼(使用Glimpse知道)?如果是服務器端,它是在內存操作中命中DB的代碼,查詢執行時間還是服務器端。

通常,提高性能的第一步就是精確測量它,併爲瞭解決這些問題,您應該知道問題出在哪裏。

根據你的第一個陳述,如果我是你,我會顯示每個計數在一個單獨的div中,它將被異步刷新。您可以選擇使用定時器定期更新數據,甚至可以更好地從服務器推送數據(使用SignalR)。更新將透明地進行,因此不需要重新加載頁面。

希望這會有所幫助。

+0

謝謝,實際上它就像我們的登陸頁面一樣,會有一個隨機選擇的三個表格(如A,B,C)的提示區域。如果用戶點擊B,他將被重定向到B的詳細信息頁面,同時新​​隨機選擇的A,B,C將在該提示區域加載,等等。太多時間的原因是我的服務器端代碼,因爲每個表包含1000條記錄。所以每次選擇我的A,B,C我都需要完成一定的條件檢查。導致延遲 – 2015-02-12 04:37:38

+0

如果用戶在登錄後刷新頁面,或者對於一個用戶保持不變,會提出問題的變化嗎? – SBirthare 2015-02-12 04:39:57

+0

否每個頁面刷新都不會改變問題,並且不必在每次刷新頁面時顯示來自數據庫的最新數據。 – 2015-02-12 04:40:50

1

我同意1000條記錄看起來不是很多,但如果你真的不關心有輕微的延遲,你可以嘗試使用HttpContext。緩存對象。這非常像字符串鍵和對象值的字典,並增加了可以設置到期等等

藉口錯別字,在移動所以沒有編譯檢查:

var tableA = HttpContext.Cache.Get("TableA") 
if tableA == null { 
    //if its null, there was no copy in the cache so create your 
    //object using your database call 
    tableA = Array, List, however you store your data 
    //add the item to the cache, with an expiration of 1 minute 
    HTTPContext.Cache.Insert("TableA", tableA, null, NoAbsoluteExpiration, TimeSpan(0,1,0)) 
} 

現在,無論有多少次請求會通過,你只能每分鐘一次訪問數據庫,或者一次只要你認爲考慮到你的需求是合理的。如果某些特定情況發生,您也可以觸發從緩存中刪除項目。

+0

這個看起來是另一個不錯的選擇。感謝分享這個 – 2015-02-12 06:40:20

相關問題