データアクセスはパフォーマンスのボトルネックになりやすい部分です。そしてデータアクセス部分を担当するO/Rマッピングフレームワークは、パフォーマンスに与える影響において最も気になるポイントの1つでしょう。実際、著者はこの連載の当初から、ある知人に「ほかのデータアクセスソリューションとのパフォーマンスの比較をぜひやってほしい」といわれていました。 このご要望に応えて、今回はHibernateとJDBCおよびCMPとのパフォーマンスを比較する簡単なテストを行ってみることにします。
@ITで、最近流行りの Hibernate のパフォーマンステストの記事。EJB の CMP (Container Managed Persistence) と、JDBC での直接の SQL 発行コード、その三つを比較。サンプルプログラムをサーブレットで組んで JMeter で負荷テストというもの。
結果は Hibernate、CMP がそれぞれキャッシングの仕組みを内包しているので生 JDBC よりも速く、Hibernate と CMP を比較しても Hibernate が速い。結果 "Hibernateは JDBC や CMP に比較してパフォーマンス面で遜色がないことがわかる" という結論に。
テストのサンプルがかなりシンプルであるのと、JDBC でのコードがパフォーマンスを気にしていないというのがあるので一概にはなんとも言えませんが、実際に Hibernate を利用したアプリを作るにあたってのベンチの仕方の参考にはなりそう。
Class::DBI なんかを使うときも、この手のベンチをしっかりやってから導入といきたいところだけどなかなかそこまで手が回らないというのが大方の見解でしょうか。みんな、Perl でのこの辺りのパフォーマンス計測はどうしているのかなあ。