2013-04-23 53 views
1

我正在開發一個使用實體框架訪問數據庫的.net客戶端應用程序。這是一個多用戶應用程序,有時可能幾天內沒有任何更改,有時一次有數百個更改。在數據庫更改時重新加載緩存

我需要緩存非常多的數據,因爲需要完成一些檢查並顯示給用戶。當一個應用程序實例中的某些內容發生更改時,我解決了一個緩存更新其他緩存的問題然而,我不確定當應用程序的其他實例發生更改時,最佳方法是什麼。

我試圖使用SqlDependency來使我的緩存失效,但是這會迫使我在只有一位發生變化時重新載入非常多的數據。性能不太好。當使用SqlDependecy的應用程序在數據上改變某些內容時,它也會觸發,因此一次更改會使緩存更新兩次。

因爲我從來沒有開發過一定數量的緩存,所以我不知道如何繼續下去。做這個的最好方式是什麼?

+0

爲什麼單個位更改迫使您重新加載非常多的數據? – Paparazzi 2013-04-23 13:26:17

+0

嗯,也許我做錯了什麼,但是當我收到通知時,我不知道到底發生了什麼變化,所以我不能重新加載更改後的數據。我需要將所有可能在SqlCommand下更改的內容進行重新表示。例如表'A'中的所有元素,其中fk ... = x。可以是相當多的數據。 – Patrick 2013-04-23 13:56:09

+0

瞭解,但仍然不會強制您重新加載所有數據。您可以讀取讀取數據並僅更新已更改的數據。或者你可以在SQL上實現一個觸發器來寫出更改,因此你只需要檢查該表。 – Paparazzi 2013-04-23 14:38:50

回答

1

單個位仍然不會強制您重新加載所有數據。
您可以讀取讀取數據並只更新已更改的數據。

或者你可以在SQL上實現一個觸發器來寫出更改,所以你只需要檢查該表。
如果多個客戶端正在從觸發器表中進行同步,那麼可能會有另一個FK表,客戶端可以指示他們拿起了什麼。
每晚清理掉東西。

+0

你的答案明確地讓我走了。我只是不確定是否應該使用觸發器或SQL Server(2008 R2及更新版本)提供的「更改跟蹤」。通過使用觸發器的解決方案,我擁有更多的控制權,但必須爲每個表執行此操作。或者是否有可能在一次觸發中爲所有表執行此操作? (我從來沒有使用觸發器) – Patrick 2013-04-25 07:14:52

+1

我建議兩者。更改跟蹤以通知。然後觸發以確定哪些數據已更改。我不認爲你可以有一個觸發器的所有表,並懷疑這是最好的解決方案。當然你有一些沒有被用戶更新的表格。你不希望觸發表觸發。您可以將多個觸發器寫入同一個表。 – Paparazzi 2013-04-25 18:50:02

相關問題