2011-07-08 62 views
1

我們爲客戶提供關鍵應用程序。它是一個clickonce winforms應用程序,它使用幾個與Oracle數據庫通信的WCF服務。 該服務由Oracle Application Server託管,前面有兩個Web緩存服務器用於負載平衡。數據庫在另一臺獨立的機器上。通過緩存提高winform應用程序和WCF的速度

事情是,應用程序現在性能不佳,我們需要加快速度。我們嘗試了許多技術:在分析解釋計劃時通過添加索引來優化查詢,減少客戶端的服務調用並分析客戶端應用程序的陷阱。

但我真的很想在數據庫或WCF上設置一個緩存層。數據非常重要,經常更換,因此需要根據所有請求獲取最新數據。 因此,當數據庫中的數據更改時,緩存應該立即過期。查詢很複雜,最多兩個14-15連接...

如何正確的方式來做到這一點,我應該使用哪些工具/框架?我聽說過memcached ..這是好事嗎?

+0

你是否分析了應用程序以計算出所花費的時間?在解決方案中投入複雜性,直到您知道最大的降價回報在哪裏可能會適得其反 –

+0

我有,並且從數據庫檢索數據可能是最大的問題 – Martin

+0

所有數據訪問是通過您的服務還是數據可以在數據庫帶外? –

回答

1

因爲您的代碼可以看到數據的所有更新,所以您可以擁有一個非常有效的緩存層,因爲緩存可以與數據庫同時更新。

隨着您對絕對緩存一致性的要求,您需要確保所有服務器都看到相同的緩存。有兩種方法,你可以採取:

  1. 有一個使用類似於ASP.NET緩存,其應用服務器交談來獲取和更新數據
  2. 使用緩存的產品,以保持高速緩存服務器

如果您使用緩存的產品有市場上的一些:memcachedgemfirecoherenceWindows Server AppFabric Caching

有關的AppFabric的好處緩存(項目正式名稱爲Velocity)是Windows Server免費的,並且對.NET非常友好(雖然它比其他一些更新,所以你可能會說不太成熟)