2009-11-27 47 views
0

我的數據庫編程經驗非常有限,訪問數據庫的應用程序是簡單的:)。到現在爲止:(我需要創建一箇中等規模的桌面應用程序(它被稱爲富客戶端?),它將使用網絡上的數據庫在多個用戶之間共享數據,很可能我會使用C#和MSSQL/MySQL/SQLite。豐富的數據庫前端 - 如何正確處理低質量的網絡?

我已經進行了一些驅動器測試,發現在低質量網絡上數據庫訪問並不那麼順暢。在一家公司的局域網中,通過網絡傳輸大量數據並且服務器處於持續負載狀態,所以這是一種常見情況一個簡單的INSERT或SELECT SQL查詢將花費1-2分鐘,甚至會因超時/網絡錯誤而失敗

這是處理這種情況的最佳實踐嗎?當然,我可以將我的應用程序分成GUI線程和數據庫線程網絡問題不會導致凍結的GUI,但是如何處理大量的n網絡錯誤?向用戶顯示它們往往不會很好:(我正在考慮在應用程序運行的每臺計算機上自動創建數據庫的本地副本:首先更新本地數據庫並在後臺同步它,然後簡單地重試網絡錯誤。這將能夠保證在網絡具有很大的滯後/問題的應用程序的功能活動。

任何提示和行話我能看看嗎?也許它的一些最佳做法,已經可以說我不知道​​:)

回答

2

對不起這可能不是你正在尋找的答案,但你提到一個簡單的插入/更新可能需要1-2分鐘,甚至因超時/網絡錯誤而失敗。

這對我來說聽起來可能會有另一個問題,而不是網絡本身。如果你在公司網絡上工作,那麼這種行爲必須有瘋狂的流量級別。在繼續之前,我會竭盡全力去改善網絡。你可以發佈ping數據庫的結果嗎?

如果您打算圍繞這種類型的網絡構建您的應用程序,它將顯着改變最終產品,甚至可能導致其他客戶的劣質產品。

根據應用程序的性質,可能會考慮在啓動時實現異步持久性隊列和緩存數據,甚至將db的副本嵌入到應用程序中。

+0

對於網絡設計糟糕,組裝錯誤,無法維護的中小型公司來說,這種情況屬於正常情況。當然,MySQL服務器比SQLite更具網絡容忍度,但2-3秒的ping和windows共享由於滯後而無法打開,可以終止應用程序和數據庫之間的任何網絡對話:) – grigoryvp

1

儘管異步行爲/隊列/緩存/將數據庫複製到每個本地實例等將有助於解決症狀,但問題仍然存在。如果網絡真的不好,我會用他們的I.T來解決它。部門或項目經理,並將他們身邊的一些績效要求納入合同。

+0

+1用於向合同添加子句 – Karl

+0

是個好主意。但是有時候最好將網絡容忍度增加到軟件上,而不是爲了他的網絡質量與每個第10個人對抗:) – grigoryvp