私はAkkaを使用してJDBC接続プールを作成しました。Akkaはいつより良いパフォーマンスをもたらしますか?
アクタを使用して、実際のデータベース接続の「maxPoolSize」コレクションを保持します。呼び出し元はプールアクターに接続を要求し、Future[Connection]
を受信し、呼び出し元がconnection.close
にプールに戻すまで接続のステータスは「ビジー」になります。すべての接続がビジー状態の場合、新しい着信接続要求は待機キューに格納されます(プールアクタによっても保持されます)。後で接続が返されると、待機中の要求が満たされます。
このロジックの実装はakkaで非常に簡単です。数十行のコードだけです。 (getConnection
によって返さFuture[Connection]
が満たされたとき。すぐすなわち、発信者close
ベンチマークtraversed
すべてclose
要求し、その結果Future
ためAwait
を接続する)の性能をテストするためにBoneCP Multithread Testを使用している場合しかし、私は、アッカのバージョンが遅くなることがわかりましたtomcat-jdbc、BoneCP、COMMON DBCPなどの他の多くの接続プールの実装よりも優れています。私は、チューニングのために試してみました何
:複数のものをそれぞれにプールの俳優を分割
- はデフォルトのディスパッチャ設定パラメータ(スループット、並列処理)の一部を微調整するすべての実の接続
- の一部を保持
しかし顕著な改善は見られませんでした。
私の質問は:
- これはアッカを使用すると、より良いパフォーマンスを得ることを、適切な使用事例ですか?
- もしそうなら、どうすれば手作りスレッド接続プールの実装よりも似たような、あるいはより良いベンチマークデータを得ることができますか?
- そうでない場合、なぜですか?決定するのに役立つ確立された基準がありますかakkaをいつ使用するのですか?
私はひどく驚いていません。あなたの開発スキルを少しでも疑ってはいけませんが、これらの他のライブラリは、非常に特殊な問題を解決するために開発時間がかなりかかります。 – joescii
#3ポイントへの回答が大好きです! – maasg
#3はここでよくカバーされていると思います:http:// stackoverflow。com/questions/4493001/good-case-for-akka – Ryan