理系学生日記

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

忍者TOOLS

Berkeley DB

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

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

より発展したアプリケーション組み込み型データベースである。DBMと同じく、SQLのようなデータ操作言語を持たず、データベースへのアクセスは全てサブルーチン呼び出しによって行う。

Berkeley DB - Wikipedia

なるほどなるほど,わかりやすい文章だと,ぼくは感心してしまった.
しかし,なんか誤魔化された気分がしないでもありません.
そこで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 だとどうなんのかな?