図1 HibernateとJDBCをベースにしたデータベース・アクセスの応答時間を計測<br>Hibernateはバージョン2とバージョン3の両方で測定した。横軸はテーブル構成の違いで,右に行くほど複雑な構成になる。1万レコードに対して100レコードを処理する場合の応答時間を表示している
図1 HibernateとJDBCをベースにしたデータベース・アクセスの応答時間を計測<br>Hibernateはバージョン2とバージョン3の両方で測定した。横軸はテーブル構成の違いで,右に行くほど複雑な構成になる。1万レコードに対して100レコードを処理する場合の応答時間を表示している
[画像のクリックで拡大表示]
図2 Hibernateの概要&lt;br&gt;Hibernateはアプリケーションのオブジェクトとデータベースのレコードを対応付けるとともに,オブジェクトに対応したレコードを呼び出すSQL文を発行する。図の下は同じ仕組みを自作した場合
図2 Hibernateの概要<br>Hibernateはアプリケーションのオブジェクトとデータベースのレコードを対応付けるとともに,オブジェクトに対応したレコードを呼び出すSQL文を発行する。図の下は同じ仕組みを自作した場合
[画像のクリックで拡大表示]
図3 検証実験で用いたデータベースのテーブル構成親テーブルのレコードと子テーブルのレコードの関係を,3パターン設定した
図3 検証実験で用いたデータベースのテーブル構成親テーブルのレコードと子テーブルのレコードの関係を,3パターン設定した
[画像のクリックで拡大表示]

Hibernate3の処理性能を,JDBCベースで自作した場合と比較した。
注目すべきは更新処理の性能で,JDBCより応答時間が約40%短縮。
一方,削除処理は,JDBCより約3倍もの時間がかかった。
Hibernateの設定を変えることで,参照処理性能は2倍以上になった。

 オープンソースのO-Rマッピング・ツール「Hibernate(ハイバネート)」の実力を検証した。JDBC(Java Database Connectivity)ベースで自作したデータベース・アクセス・プログラムと処理性能を比較したところ,挿入処理の性能はほぼ互角。更新処理はHibernateが優れ,参照処理と削除処理はJDBCが優れている結果になった(図1[拡大表示])。今回の検証実験では最新版のHibernate3と,参考までにHibernate2で測定した。

自動生成されるSQL文を検証

 O-Rマッピング・ツールとは,Javaプログラムなどのオブジェクト(Object)とリレーショナル・データベース管理システム(RDBMS)のレコードを対応付け(マッピング)するとともに,データベースを操作するためのSQL文を自動発行するソフト(図2[拡大表示])。Hibernateは,Java言語で利用できるO-Rマッピング・ツールの代表と言える。通常Javaアプリケーションを開発する場合,データベースにアクセスするために,Javaのコードの中にSQL文を記述する必要がある。Hibernateを使えば,このデータベース・アクセスのためのコードの記述量が減り,開発効率の向上が期待できる。

 一方で,基本的にプログラマがSQL文をコーディングしないので,処理性能の面で不安がある。Hibernateによって自動生成されるSQL文が不適切であれば,処理性能は低くなるからだ。

 そこで,Hibernate の処理性能を検証することにした(検証(1))。比較対象は,Hibernateを使わずに,SQL文を開発者がコーディングする場合である。また,Hibernateのチューニングも試みた(検証(2))。

 検証(1)では,参照,更新,削除,挿入の各処理にかかる時間を測定。テーブル構成は3パターン用意した(図3[拡大表示])。(1)