2011-03-17 12 views
0

我編寫了一個具有多用戶的Web應用程序。他們是選擇數據或插入數據的每一件事。但選擇一些數據需要太多時間,例如使用LINQ或數學計算。我一件事情: 我USER1:如何用C#編寫代理?

select * from MyTable -----> save as caching via proxy server in machine 

我的用戶2:

select * from MyTable2 -----> save as caching via proxy server in machine 

我的用戶3:

insert into MyTable2 -----> Update caching(select * from MyTable2) via proxy server in machine 

如何寫一個代理服務器,選擇更快,更新選擇的結果,如果其他用戶更新表?

enter image description here

+1

我會建議使用預先存在的緩存解決方案,而不是從頭開始編寫新的解決方案 – Eric 2011-03-17 09:59:54

+0

我不知道這是否適用於您的情況,或者您是否僅使用了簡化示例,但在您的「WHERE」 SELECT(並且只選擇所需的字段而不是'*')可能比手動緩存數據提高性能。請記住,數據庫訪問通常非常快*(當索引位置正確並且只請求真正需要的數據時),並且同一子網上的計算機之間的網絡連接通常也很快。你有沒有做基準測試來找出你的性能瓶頸在哪裏? – Heinzi 2011-03-17 10:04:43

+0

所以你想要一些可以在內存中保留最近/頻繁選擇的行,並確保對錶進行的任何更新都反映在內存行中的更新中,同時處理內存壓力等問題?這聽起來像SQL Server已經在內部做了什麼(並且在大多數時間做了很好的工作)。 – 2011-03-17 10:29:15

回答

1

我想我明白你的意思。如果你想實現圖形上顯示的結果,那麼一種方法是讓服務器緩存任何機器請求的所有數據。我認爲這在內存方面的開銷太大了,但是你可以用很多方式來完成這個任務。例如,創建一個處理所有數據庫調用並隨後緩存結果的代理類。每當下一次調用完成時,處理程序類檢查代理並返回,如果存在的話;如果沒有,那麼它會打電話並將結果添加到緩存中。

順便說一句,我認爲這部分已被現有的ORM考慮在內,不是嗎?

+0

我不明白最後一句話:「順便說一句,我認爲這部分已經被現有的ORM考慮在內了,不是嗎?「 – programmerist 2011-03-17 11:17:48

+0

ORM =對象關係映射(Object Relational Mapping)簡而言之,這是Entity Framework,Linq To Sql,NHibernate的通用名稱,我想他們都已經有了這個內置的開箱即用的功能哦。辦法 :-) – Tengiz 2011-03-17 11:19:48

0

你爲什麼要爲代理?

你要完成什麼是使用的好處之一ADO實體框架

你有教程無處不在的網絡,但你可以開始with this one

ADO實體框架是足夠聰明要緩存多次使用的對象,並在不同步時刷新它們,它們還具有一系列奇妙的屬性,如遲綁定和併發處理。

+0

balexandre;我認爲你不瞭解我。我也是一個專業的實體framework.Thanks提醒。但我不想重新生成數據,我將選擇結果保存在另一臺機器上 – programmerist 2011-03-17 10:05:13

+0

爲什麼你需要再處理一臺機器(多一個連接,多一個許可,多一件事),而不是正確地做事? ORM +緩存將爲您提供開箱即用的功能,無需重新發明輪子! – balexandre 2011-03-17 10:09:26

+0

好的;)但我必須使用linq來sql緩存在linqtosql中是否可以? – programmerist 2011-03-17 10:19:51