我們開發了一個運行在MS SQL Server上的C#WinForms應用程序。直到今天,我們正在使用一個非常簡單的自制OR-Mapper(使用Reflection),並使用一個單獨模式實現的廉價緩存機制。有一個用戶觸發了「重置」功能。該架構是一個簡單的兩層(客戶端,服務器)三層(客戶端的表示和邏輯,MS SQL作爲服務器上的數據層)。全網數據同步
通常我們會加載大約300行,大約30列,這些列經常發生變化(以及一些其他表格很少發生變化)。此應用程序的不同實例在不同的客戶端計算機上運行,加載了相同的300行並正在隨機行上更改數據。應用程序立即在數據庫上更新數據。在他們這樣做之前,檢查完整性以便用戶在出現問題時得到反饋。但是對於某些行,用戶會在屏幕上看到舊值,因此當他想確保獲得最新數據時,他必須手動重置緩存。
如果應用程序考慮更改的行本身,那將會很不錯。每隔幾秒都會有更新。但是,只有部分更新相關的其他應用程序(取決於有源濾波器...)
解決方案,我心裏有:
- 使用OR映射器具有一個共同的高速緩存(例如, NHibernate與集羣緩存)
- 打開問題:這些L2緩存爲客戶端應用程序?緩存更改發生時可以觸發UI更新嗎?其他基於OR-Mapper的解決方案?
- 使用應用程序服務器實現另一個層,將邏輯移動到此應用程序服務器。只運行一個實例,它緩存數據並在邏輯對象上發送事件,通知其他客戶端更新的數據。不要在客戶端緩存任何數據。
- 打開問題:在App Server上加載?與應用程序服務器進行開銷溝通?將邏輯DLL移入App Server的工作量。?報表數據源(直接/應用服務器)?
- 事情是這樣的用戶認爲:https://stackoverflow.com/questions/7593884/what-technology-to-use-for-data-persistence-cache-and-synchronization-in-n-tier
- 添加一些類型的數據變化的邏輯電平通知(基於廣播noticiation ...)
- 開放式問題:現有的庫?在SQL Server上加載?
- 完全的其他解決方案?
我知道我沒有得到的解決方案在這裏。只需要關於這些解決方案(或新的解決方案)的一些想法...感謝您的任何投入!
好吧,我在這裏忘了一些東西:在用戶的網格上顯示了300行,但這些是實際數據集的分組視圖。實際的數據集可以是幾百到幾千個記錄......另外,當我更新整個數據集時,讓我們說每隔5秒鐘客戶端本身就非常忙於重畫網格等等。我想在行級別上進行更改... – falstaff