ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2JDBC & Hibernateベンチマーク

S2JDBCHibernate、素のJDBCS2Daoとのベンチマーク結果をこれから徐々に公開していきます。
このベンチマークのプロジェクトは、S2Container.javaリポジトリにコミットされているので、誰でも自由に見ることができます。
第一弾は、S2JDBCHibernateで1万件の従業員を検索するシンプルなやつです。関連は、すべてLazyです。従業員は、良くある部署や住所との関連を持ちます。データはデータベースにキャッシュされるようにテストのsetUp()で全件検索するSQLを実行しています。データベースはオラク○です。ナノ秒精度で3回測定しました。()の中が平均です。

  • S2JDBC(1.357176629)
    • 1.355739341
    • 1.357618839
    • 1.358171707
  • Hibernate(2.173966161)
    • 2.174851771
    • 2.179259106
    • 2.167787608

Hibernateが1.6倍くらい時間がかかっているのがわかります。
従業員は、関連の外部キーを持っているため、Hibernateは、関連のプロキシ用に余分なSQLを発行することがありません。つまり、S2JDBCHibernateも"select * from employee"を発行しているだけです。この違いは、永続コンテキストを管理するコストと見ることができるでしょう。
永続コンテキストは、デフォルトでトランザクション中は、キャッシュされるます。今回の時間の違いは、キャッシュにヒットしなかったときのパフォーマンスの違いと捕らえると良いのではないかと思います。