2012-09-14 280 views
1

我有一個使用WPF用C#編寫的客戶機/服務器應用程序。服務器上的數據庫變得越來越大,應用程序必須加載它的大部分數據(我們不要討論它的那部分內容......只要相信我,並將其用於實際)。我可以根據需要按需提取數據,但由於使用遠程數據庫來回查詢會產生性能問題。使用本地數據庫優化客戶端服務器應用程序?

但是,如果在應用程序啓動時我可以將需要的數據下拉到客戶端並將其存儲在本地運行的數據庫中,那將會很棒。應用程序然後查詢本地數據庫,而不是遠程服務器數據庫。通過這種方式,應用程序保持較低的內存佔用量,但仍然可以快速訪問數據,因爲它是本地的。

是否有可能以這種方式使用SQL Server Express或LocalDB?即讓它們在客戶機上運行,​​並在應用程序啓動時與服務器數據庫同步?如果是這樣,這是推薦使用還是不推薦使用它們?

感謝

回答

0

退房MS同步框架,如果您尚未:http://msdn.microsoft.com/en-us/sync/bb736753.aspx有一個陡峭的學習曲線,但它是專爲這些場景。

應用程序可以在啓動時或在需要時將新/更新的數據下拉到本地數據庫。這對性能或網絡連接可能不穩定時很有幫助。

+0

非常有趣!不知道這存在。謝謝! – Nullqwerty

0

難道你不會考慮這種方式,而不是將其他顧慮推到客戶端上,只考慮在數據庫前放一個薄層?

如果您使用的是基於NoSQL的精簡層(MongoDB或CouchDB最受歡迎),您可以在其中緩存對象,以便將加載從數據庫中取出並推送到緩存中,然後獲得能力如果需要,可以在其他盒子上水平調整緩存。

我知道這有點違背了你的問題的「使用本地數據庫」部分,但我不想忽略這樣一個事實,即你可以在不觸及客戶端的情況下解決你的問題(也許幾個連接字符串的變化,但你的模型將保持不變)。

+0

有趣的想法,我一定會對這種方法感興趣。自你發佈它以來,我一直在研究它。我主要關心的是將mongo-db作爲中間人添加所需的努力水平。起初它似乎並不壞,但現在看起來它可能比預期的要大。感謝您的提示,但! – Nullqwerty

+0

好吧,你可以根據需要簡單或複雜,因爲Mongo例如只是存儲對象(你完成序列化和底層傳輸),你只關心保存和檢索對象。一般而言,您會使用某種Web服務來公開數據,它可能不是您所需要的直接匹配,但它可以大量傳播讀取查詢的負載,從而提供始終簡單的POCO請求,而不是複雜的查詢等,這是另一個不同討論的設計問題。 – Grofit

相關問題