理系学生日記

おまえはいつまで学生気分なのか

Berkeley DB

subversion ではデータストアとして Berkeley DB (BDB),FSFS のどっちかを選べるそうですが,何が違うんだろうと思いました.

wikipedia を読みますと,Berkeley DB についてこんなことが書いてあります.

Berkeley DB - Wikipedia> より発展したアプリケーション組み込み型データベースである。DBMと同じく、SQLのようなデータ操作言語を持たず、データベースへのアクセスは全てサブルーチン呼び出しによって行う。 << なるほどなるほど,わかりやすい文章だと,ぼくは感心してしまった. しかし,なんか誤魔化された気分がしないでもありません. そこでhttp://www.oracle.com/database/docs/Berkeley-DB-v-Relational.pdfを読んでみるなどしたよ.

**Berkeley DB

***設計思想

どうもカリフォルニア大学のバークレー校で研究が始まったから Berkeley DB みたいですね.その後ハーバード大で研究が続けられたそうで,なにこの黄金の系譜. そんな Berkeley DB の設計思想としてはこんな感じ. -サーバも,人間による管理も必要ない DB. -アプリケーションに埋め込む形で使用する. -迅速かつ信頼性のある DB Berkeley DB を使用するためにはプログラムを書くしかなくて,SQL とかも使えません.言い方を変えると,Berkeley DB に SQL の解釈実行系は必要ない. その代わりに,プログラムから API を呼び出してアクセスとかします. このようにBerkeley DB はメチャクソ単純な DB だそうなんですけど,並行したトランザクションもちゃんと扱えるようになっていて,複数の{スレッド,プロセス}で1つの DB にアクセスしても安全ぽいです(実際にはレプリケーションとかの機能は OFF にすることも可能).

***Berkeley DB の存在理由

RDB だとオーバースペックであったり,基本的にはサーバが必要になるし重い. でも,データベースでない,単なるファイルシステムだと並行性とか一貫性が保てない. そこでその中間に位置する DB が必要になったみたいな話です.

**長所

アプリケーションに埋め込む形で使用するので,アプリケーション側としては DB を使う上で,プロセス間通信もネットワーク越しのアクセスも必要なくなる.オーバヘッドがちっちゃい! データをディスクからコピーする回数も減る*1. というわけで Berkeley DB の性能は極めて良いそうです. また,任意のビット列がキー/データとして扱えるのも,普通の RDB とは違うところ. エンドユーザからの視点では DB の存在が見えない (ユーザはDBの管理作業から開放される.ただしソフトウェアエンジニアがアプリケーションプログラムの中に,レプリケーションとかの実行を頑張る) も長所として挙げられていたりしました.頑張るソフトウェアエンジニアとかは Berkeley DB の柔軟な設定項目を生かして,テーブルのページサイズとか,メモリキャッシュサイズとかいろいろ設定できるらしい.subversion の中の人がんばれ!

*1:いったんバッファキャッシュに溜め込めるから,っていう理由が書かれているんですけど,RDB だとどうなんのかな?