2010-02-08更新 2006-09-04作成

 H2 DB Engine インストール・設定 技術メモ

 ここはオープンソースのDBMSであるH2 Database Engine(以下H2 DBと略)をWindows環境で動かしJavaから使うための、インストールから最低限の環境設定までをまとめたものです。
 Java実行環境としては「サーバーJava入門編」を前提しているため、TOMCAT下となります。

 ◇H2 Database Engineって何?
 ・H2 DBの歴史

 H2 DBの作者、デザイナはトーマス ミューラー(Thomas Mueller)氏です。もともとはHypersonic SQLというデータベースを作成していました。2001年に氏がPointBase社に移るとともに、Hypersonic SQLの開発は中断されました。そしてこれを元にHSQLDBが開発されたのです(HSQLDBはたしか、JDK1.3まではSDKに同梱されていたと思う)。
 そして2004年5月から、当初はHypersonic2として開発を始めたものが現在のH2 DBなのです。最初はHypersonic2として開発されたといっても、ソースコードはHypersonic SQLやHSQLDBとは全く別、完全にフルスクラッチで新規にプログラミングされているそうです。

 ・H2 DBの特徴

 H2 DBの特徴のうち、主なものをいくつか挙げておきます。

(1) 全てJava
 H2 DBは全てJava(JDK1.4)で開発されています。ですからJRE1.4(あるいは以降)が動いていればWindows、unix、MacOSなど、どこでも使えるはずです(開発自体はWindows XP上で行われたそうです)。

(2) ネイティブ版もある
 H2 DBはオープンソースなのでソースコードも公開されています。ソースコードからGCJを使ってビルドすることにより(方法はマニュアルに載っています)、ネィティブな機械語版のH2 DBも手に入ります。ただこのGCJ版(ネイティブ版)はまだテストが十分でなく(2006/8/31、V1.0版の段階)、エラーメッセージも出さずにアプリケーションが止まってしまうことがあるようです。

(3) 組込(Embedded)モードとサーバーモードがある
 サーバーモードは通常の、データベースサーバーとして動作するモードです。
 組込モードは、特定の業務システムあるいは業務環境に組み込んで使うときのモードです。

 もう少し詳しく2つのモードの動作状態を見てみましょう。まずH2 DBはJavaで実装されているため、動作するときにはJava VMが必要になります。Java VM上の1アプリケーションとしてH2 DBが動作する訳です。
 サーバーモードはH2 DB専用のJava VMを起動する方法と言えます。つまりこのJava VM上では、H2 DB以外のアプリケーションは動かさない方法と言っていいでしょう(後に出てくる、H2 DBの起動方法を読むともう少しイメージが湧くと思います)。

 組込モードですが、ここではWeb系システムのサーバーJava環境ということで説明します。Web系のサーバーJava環境を動かすためにはAPサーバー(サーブレットコンテナ)が必要です。サーブレットコンテナはJava VMで動きますが、この中でH2 DBも一緒に動かす方法が組込モードです。同一Java VM上で、APサーバーとは別スレッドでH2 DBが動いているというイメージです。
 たとえば何かのシステム、例えばバグトラッキングシステムや、勤務表管理システムなどを作ったときを考えます。このシステム内でのデータ保持用に、他のシステムやDBと独立した専用のDBを作ることが想定できます。
 そのシステムなりパッケージソフトと一緒に、そこで使うDBも一緒に配布すれば済む、ということです。配布先でメインに使用しているDBが、DB2、Oracle、SQL Server、MySQLなど違っていても、それに影響されず自分専用のDBを持てる、ということです。こうした場合運用管理上からも、別DBサーバーのプロセスを動かしたり別DBサーバーを立てることなく、自分用のDBを使えるというのが組み込みモードのメリットです。

(4) クラスタリングにも対応
 別PC(サーバー)で動作するH2 DBと、クラスタを構成出来ます。クラスタといってもいろいろレベルがあるのですが、マスタ/スレーブを持たないレプリケーションと思った方が良さそうです。
 例えばMySQLの場合はレプリケーションを構成するDBのうち、マスタに対する変更内容をスレーブのDBに自動的に反映してくれます。H2 DBはそうでなく、クラスタを構成するいずれかのDBを変更をすると、クラスタ内の他のDBに自動的に反映という仕組みのようです。

(5) とにかく早い(らしい)
 Webページにも載っていますが他のオープンソースDB、HSQLDB、Derby、MySQL、PostgreSQLと比べてかなり高性能らしいです(組込モードのとき、サーバーモードでもMySQLを超えるらしい)。ただ次の特徴にも関わるのですが、例えばMySQLやPostgreSQLが対象にするような業務やシステムの規模と比べると、対象システム規模には制約がありそうです。少なくとも今のところは大規模での実運用は止めたほうがよさそうです。

(6) 分散DBにも対応
 2010/2/8現在、バージョン1.2が公式リリースになっています。
 排他制御に関してはバージョン1.0の段階では行単位ロックはサポート外で、全てテーブル単位ロックになっていました。
 2008/10/4にリリースされたバージョン1.1.100以降のリリースでMVCC(Multi Version Concurrency Control)機能が有効になり、行ロックが実装されています。
 またバージョン1.2では2フェーズコミットもサポートされているので、分散DBにも対応しています。

(7) バックアップはまだ充実していない
 充実していないとはいうものの、これはホットバックアップ(DB稼働中のまま行うオンラインバックアップ)がまだサポート外ということです。バックアップを取るときは、バージョン1.2の段階ではDBを停止してからになるようです(もう少し方法が分かったら補足します)。
 ホットバックアップではありませんが、BACKUPコマンドは2007/4/29にリリースされたBuild 46以降、正式に使用可能となっています。

 ・H2 DBの状況

 2006/8/31にバージョン1.0が公式にリリースされました。しばらくの間は平均して月1回以上、新しいリリースが出ていましたが、2007年になってからは、2ヶ月に1回くらいのペースで新しいリリースが出ています。それだけ安定してきたと言えるでしょう。

 ただChange Logなど見ていると、RightやLeftのOuter Joinやサブクエリー関連などのフィックスが散見されます。
 余り複雑でないJoinやネストの深くないサブクエリーなら、ほぼ問題無いのではないでしょうか。今からH2 DBを試しておくのも面白いと思います。
(2007/9/15にリリースされたBuild 58のChange Logを見ていても、この辺のバグフィックスはもうあまり見かけません。かなり安定してきているようです。)

 2010年になってバージョン1.2が、ベータ版扱いから正式安定版リリースの位置づけに変わりました。

 次の具体的なインストール方法や設定手順説明を見て欲しいのですが、設定らしい設定は特にありません。MySQL等と比べても手軽に、本格的なリレーショナルデータベースが使えます。

 今からH2 DBを試しておくのも面白いと思います。

 ・確認した環境

 ここでは H2 DBを
・Windows環境にインストールし
・Javaから(トランザクション機能を含めて)使用し
・日本語データを扱える
ところまでの最低限の設定について説明します。あくまでも「私の場合はこうしたら出来ました」という内容です。

 なおここではH2 DBのバージョンは2007年10月20日現在のV1.0 Build 60、について説明しています。

 動作確認を行ったOSは
・Windows2000 Professional Edition SP4
・WindowsXP Home Edition
です。

 またJavaのバージョンは、 J2SE 5.0 を使用しました。


 「H2 DBインストール・設定」に続く






このページの先頭  技術メモ先頭  サーバーJava入門先頭  H2 DB Engine編先頭
Copyright © 2006-2009 YOK. All Rights Reserved.