RDBをサービスで使うんだとしたら、普通は必ず必要になるであろう「アプリケーションでのコネクションのプーリング」の話です。
Javaでコネクションプールのライブラリと言うと、commons dbcpぐらいしか自分は知りません。seasarだと独自のコネクションプール実装のS2DBCPがあったようです。ずっと使ってたけどよく分かってませんでした。
で、Clojureでコネクションプーリングするとしたら、何がメジャーなのかというのが気になって調べ始めました。調べてみたら別にClojure関係なくJavaのコネクションプールのライブラリを調べる結果となりました。
あんまり種類見つからなかったので、出逢ったものを全部列挙します。
- C3P0 (本家のサイトがよく分からなかったですので、sourceforgeにリンクしてます。)
- commons DBCP
- BoneCP
- Tomcat JDBC Connection Pool
- HikariCP
- vibur
C3P0 and commons DBCP
C3P0 と commons DBCP はどちらも結構古い*1です。 どっちがいいのか分からないですが、この2009年のstackoverflowの記事によると、「commons DBCP は out of date だから C3P0 を使え」・・・「と思ったけど、そんなこと無かった」とかベストアンサーの人が言ってます。
と思いきやよく見ると、コメント欄に「 HikariCP っていうのがめっちゃオススメ」って言ってる人がいます。2013年10月のコメントです。
BoneCP
(HikariCPはいったん置いておいて)commons DBCPでググると1stページにDBCP より 50倍早い!? BoneCP を使って高速コネクション・プーリングを実現する方法という記事がひっかかりました。 50倍高速ならこれを使っとけばOKだと思うんですが、ベンチマークのページの画像がいくつかリンク切れしててちょっと不安になります。
と思いきや、「Tomcatの新しいJDBC poolを加えた、新しいベンチマークはこちら.」というリンクがあって、それを押すと、今度は Internal Server Error だったのでさらに不安になりました。
githubのBoneCPに行くと、一番上に「・・・C3P0 や DBCP のような古いやつを打ち負かす。だけど、今はdeprecatedで、HikariCPのほうが好ましい」って書いてありました。。
Tomcat JDBC Connection Pool
BoneCPのおかげでTomcatにもコネクションプールの実装があることを知りました(遅い・・・)。tomcat7.0以降はデフォルトで付いてくるそうです。ただ、今回はTomcat縛りではないほうが嬉しいので、選択肢としてはなしです。
HikariCP
githubのHikariCPを見ると、めっちゃ速いってベンチマークが載ってるし、漢字で「光」って書いてるだけあって速さを意識してるんだと思います。スターも1000以上付いています。
vibur
HikariCPのベンチマークのグラフを見ると、2番目に速いライブラリにviburというのが出てきます。vibur-dbcpはvibur-object-poolという、より汎用的なプーリングの仕組みのライブラリをベースにしているようです。githubのvibur-dbcpを見ると、開発は今もされているようですが、コントリビュータは1人でスターも12個と、HikariCPと比べるとマイナーのようです。
conclusion
結論として、HikariCPが最も速そうで、今最もメジャーそうです。play2.4もhikaricp使ってるっぽいし。ただし、ここまで*2一切自分でベンチマーク取ったり、ソース読んだり、動かしていません。
で、もともとの目的のClojureでのコネクションプーリングですが、HikariCPのClojureラッパーの実装があるようなので、とりあえずそれで良いんじゃないでしょうか。*3