S2JDBC & Hibernateベンチマーク
S2JDBCとHibernate、素のJDBC、S2Daoとのベンチマーク結果をこれから徐々に公開していきます。
このベンチマークのプロジェクトは、S2Container.javaのリポジトリにコミットされているので、誰でも自由に見ることができます。
第一弾は、S2JDBCとHibernateで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を発行することがありません。つまり、S2JDBCもHibernateも"select * from employee"を発行しているだけです。この違いは、永続コンテキストを管理するコストと見ることができるでしょう。
永続コンテキストは、デフォルトでトランザクション中は、キャッシュされるます。今回の時間の違いは、キャッシュにヒットしなかったときのパフォーマンスの違いと捕らえると良いのではないかと思います。