軽量なデータベース:Berkeley DB Java Edition

2010年2月14日

JavaやC言語でプログラミングをしているとき、ふとRDBが使いたくなるシチュエーションって多々ありますよね? 

そんなとき、今まではMYSQLや PostgreSQLを使っていた訳ですが、いちいちDBサーバ立ててユーザ作って、 ユーザ権限割り振って、動いてるかなー?って、、、いろいろとコマンド覚えるだけでも大変だったりする訳です。 あと、アプリとRDBが一対一で存在していなければならないようなケースでは、アプリにそんなDBサーバシステムまで 一緒に含めてリリースするのは何か気が引けます。

そんなとき、Berkeley DBは重宝すると思います。


Berkeley DBは元々、 Sleepycat Software社が開発していた組み込み向けリレーショナルDBだったのですが、 2006年2月14日、リレーショナルDBの雄Oracleに買収されました。

今ではOracle DBの一ラインナップ として盛んに開発が進められています。Berkeley DBはライブラリ形式で提供されているRDBです。 


これが意味するところは、既存のMYSQLなどに代表されるようなサーバモデルではなく、 単純にライブラリAPIをコールすることによって、ローカルに配置されたデータベースにアクセスできる ということです。

つまり、いちいちローカルのDBサーバにソケット経由でアクセスする必要はなく、 軽量・高速であるということです。

開発言語としてはC言語Javaがあり、 どちらの言語のライブラリでも全体で 1.5MB程度と非常に小さなものです。 唯一残念なことは、C版とJava版はローカルストレージに対するデータの持ち方が違うようで、 C言語ではトランザクションログファイルとDBファイルが分かれているのですが、Javaは混在しています。 よって、C版アプリとJava版アプリの両方から同じデータベースへアクセスすることはできないようです。 これについては、今後の発展に期待したいと思います。

以下にJava版 Berkeley DBの特徴についていくつかピックアップして記述しておきます。

Java版のBerkeley DBは、100%Javaで記述された組み込み向けRDBシステムです。
特徴としては以下のような事柄が挙げられます。

・マルチスレッドサポート

 レコードレベルでの排他制御を有する。

 また、タイムアウト時間を超えるロックは自動的に解除する機能がある。

 これによって、スレッド間で発生したDB資源へのデッドロック状態を回避することができる。


・レコード形式

 レコードは(キー、データ)の組で定義される。

 キー・データは、Javaの任意の型や、さらに複雑なオブジェクトで定義することができる。


・セカンダリデータベース機能

 セカンダリデータベースによって、セカンダリーキーとインデックスを作成することができ、

 プライマリデータベースへのショートカットとして高速なアクセスを可能とする。


・キャッシュ機能

 In-memoryキャッシュ機能を持つ。

 データベースへの設定の際に定義することができ、

 本機能により、より高速なR/W性能を得ることができる。


・ログ機能

・バックアップ&リストア機能

 データベース操作を記録したログをストレージに常に格納しておくことにより、

 壊滅的なエラーが発生しても当該ログファイルをデータベースファイルが位置するパスに

 コピーし、reopen()するだけで正常な状態であった段階にまで

 データを復旧させることができる。


参考文献
Oracle Berkeley DataBase Java Editionのドキュメント置き場
ここに、APIのヘルプやスタートアップチュートリアルなどの技術資料が置いてあります。 大変分かりやすくなっていますので一度覗いてみてください。