いろいろベンチ.
うーん,こうゆう数字をうかつに公開するのはよろしくないんだが.自分のメモでもあるんで,とりあず書いておこう.
前から気になっていた,各種O/Rマッパーのベンチマークを取ってみました.
素のJDBC, Hibernate, Torque, DbUtilsに対して,それぞれ以下の値を計測.
- 1000個のオブジェクトをINSERTするのにかかった時間.
- そのオブジェクトをすべて取得(SELECT *)するのを1000回繰返すのにかかった時間.
- 1000個のオブジェクトを一つずつUPDATEするのにかかった時間.
- 1000個のオブジェクトを一つずつDELETEするのにかかった時間.
手元にあったRDBはMySQL.んで,その結果はこう(単位は[msec]ね).
JDBC | Hibernate | Torque | DbUtils | |
---|---|---|---|---|
INSERT | 344 | 625 | 828 | 344 |
SELECT | 30,109 | 18,750 | 46,515 | 38,092 |
UPDATE | 390 | 750 | 1,250 | 438 |
DELETE | 375 | 890 | 593 | 375 |
JDBCが早いのとTorqueが遅いのは予想とおりなんですけど,HibernateのSELECTが予想外に早くてビックリした.
CGLIB効果ってスゴイのかとおもって,hibernate.cglib.use_reflection_optimizer
をfalseにしたら,15%ほど遅くなった.
#でも15%程度.検索だけを見るとHibernate圧勝や.
DbUtilsはね.実装がSELECT以外はJDBCとそんな変わらんから,こんなもんなんだと思う.でも,こいつにCGLIB使ったら,結構イケんじゃないのって気がするなぁ.
ps.
この数字,信用するかは自己責任でお願いします.観測者であるアタシ以外に,この値が役立つ人がいるとは思わんが.なにせ測定環境とか明記してないし.
#検証コードは恥ずかしくて,とても公開する気にはならんが.:-D
だれか似たようなことやってみない?
(追記)つづきがあるよ.