ひがやすを技術ブログ

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

S2JDBC & Hibernateベンチマーク その3

ManyToOneのfetch joinでは、HibernateS2JDBCの1.6倍、OneToManyのfetch joinは、HibernateS2JDBCの1.8倍ほど時間がかかっています。これは大体予想通り。
次は、10000件のうち最後の100件をページングで取得する場合です。HibernateS2JDBCの2倍ほど時間がかかっています。これも大体予想通り。
次は、10000件の挿入。Hibernateはバッチ更新をするようになっているので、S2JDBCもそれにあわせます。結果は、Hibernateがだいたい2.3倍くらい時間がかかっています。まぁ、予想通り。
次は、10000件の更新。Hibernateが12倍くらい時間がかかっています。Hibernateの時間がかかっているのは、永続コンテキストに格納されているエンティティが更新されているのかをチェックしているためです。Hibernateは永続コンテキストにオブジェクトがたくさんあるときに、次のクエリの処理がこの更新チェックのため時間がかかります。
でも、検索のときには、更新状態のエンティティがあれば、flush()しなきゃいけないけど、更新のときには、いらない気がするんだけどなぁ。私も理由がわからないので、小林さんに解説を振ってみる。
後、10000件の削除も40倍くらい遅くなる。この解説もお願い。