2013-04-09 74 views
1

我有一個RMI應用程序, 基本上來自客戶端的每個請求,在數據庫上創建了一個新的連接(在服務器端),一個SQL查詢並將數據轉換爲一個可序列化的類被送回給客戶。瞭解Java的良好實踐rmi

該應用程序的用戶羣增長,並且請求花了很長時間才能完成。以前的程序員提出的解決方案是從服務器到數據庫創建一個固定大小的連接池,並且每個客戶端的請求使用最舊的(最近使用最少的)運行SQL查詢。 我的問題是:解決這個問題的正確方法是什麼?

回答

2

我會說,彙集數據庫連接已經是一個重要的步驟,因爲建立連接非常昂貴。而不是實現我自己的池,但是我會使用現有的和經過驗證的混合數據源實現,例如DBCP或C3P0。他們有許多有用的功能,如vaying大小,自動連接檢查等...

如果查詢istself佔用時間過長,優化將比這更復雜。各種方法都是可能的,取決於具體情況,例如:

  • 是否只有一個SQL查詢,總是與您的問題似乎暗示的SQL查詢相同?
  • 數據庫是否只讀?
  • 如果不是,在相同的應用程序或外部進行的修改?
  • 等...

可能的方法(我能想到的現在),以減少申請時間:

  • 結果在Java應用程序的緩存(但是這是一個龐大的問題...)
  • 優化的SQL請求的數據庫架構的
  • 優化的,帶有索引或表結構
  • 的更深層次的重構減少數據本身的量nt回到客戶端只是最低限度(萬一網絡是瓶頸)

我希望這有助於。我們真的需要更多關於用例的細節來給你更好的答案。

+0

謝謝,這真的是我在找什麼,順便說一句,有很多不同的SQL查詢,不只是只讀。並且所有對服務器的調用都由這個1 rmi應用程序完成。 – user1333057 2013-04-09 13:01:44