我剛剛寫了一個使用Akka的JDBC連接池。阿卡什麼時候會帶來更好的表現?
它使用actor來保存真正的數據庫連接的「maxPoolSize」集合。來電者要求游泳池演員進行連接並收到Future[Connection]
,並且連接的狀態變爲「繁忙」,直到來電者將其返回到connection.close
的游泳池。如果所有連接都處於忙碌狀態,則新的傳入連接請求將被放置在等待隊列中(也由池參與者保存)。稍後,當連接返回時,等待請求將被滿足。
這個邏輯的實現在akka中很簡單,只需幾十行代碼。使用BoneCP Multithread Test性能進行測試然而,當(即主叫方的連接時,立即通過getConnection
返回Future[Connection]
滿足。基準traversed
所有close
的結果Future
請求和Await
close
),我發現,阿卡版本較慢比許多其他連接池實現,如tomcat-jdbc,BoneCP甚至公共DBCP。
我已經嘗試了調整:
- 分裂池演員成多個的每一個容納所有的真正的連接
- 調整一些默認調度配置參數(吞吐量,並行)的一部分
但看到沒有明顯的改善。
我的問題是:
- 這是一個合適的使用情況,使用阿卡會得到更好的性能?
- 如果是這樣,我該如何獲得與那些手工線程連接池實現類似或更好的基準測試數據?
- 如果不是,爲什麼?是否有任何既定的標準,可以幫助我決定何時使用akka?
我並不感到驚訝。不要懷疑你的發展能力,但這些其他的libs有相當多的開發時間投入他們來解決這個非常具體的問題 – joescii
希望看到#3點的答案! – maasg
我覺得#3在這裏覆蓋得很好:http:// stackoverflow。com/questions/4493001 /良好使用情況下的阿卡 – Ryan