Berkeley DBの進化の歴史

[ガラケー版(QRコード)] 総閲覧回数:3,938,775回 / ブログ拍手:2,567
作品DB等各サービスの機能追加情報や、技術系・面白系記事を中心に提供。
記事の投稿は基本Twitterでも告知させて頂いています。
連絡は作品DBの論客の方なら私書、DB外ユーザの方ならメールTwitterで可能です。
アクセス記録[推移 / PV内訳(過去1日 / 過去1週間) / 外部アクセス元 (昨日 / 過去1週間) / ログイン論客足跡]
プロフィール私書(メール)
   /   /送済
評価(一覧   /)
投票   /共:   /
ファン登録
作品/情報/
DB構築()
ブログ
[書く]
攻略記事リンク集
My Play List
<=次の記事 VPS比較2019年主要VPSベンチマーク完全版
=>前の記事 事件::世の中に悪い人はいる(尼崎事件)

1.
2012/10/31 Berkeley DB > 紹介 > Berkeley DBの進化の歴史」
[この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)]拍手:7個

1. 文章目的
2. Berkeley DBとは
    1. ライブラリから使うKV型DB
    2. 複数のAPIのサポート
    3. 複数のレベルでのデータ読み書き
    4. 複数のデータ形式
    5. 利用状況
    6. ライセンスについて
3. Berkeley DBの進化の歴史
4. 裏側の仕組みの変化図解
    1. Berkeley DBの始まりとなった設計
    2. Berkeley DB 2.0
    3. BerkeleyDB 2.06
    4. BerkeleyDB 5.0.21
5. まとめ
6. 参考になる資料

1. 文章目的

Berkeley DBの進化の歴史をまとめる事で、その作りにと使用方法に対する理解を深めてみようと思います。
2. Berkeley DBとは


    1. ライブラリから使うKV型DB

BerkeleyDBは所謂一つのキーを入力として値を得る、Key Value型の老舗のDBです。

但し、ライブラリとしてアプリケーションに組み込んで使うのが通常なので、所謂DBサーバーが別プロセスとして動いていて、それと会話をして動くといったSQL DB系のようなものとは、仕組みが大きく異なります。
アプリケーションの内部でBerkelyDBのライブラリのメソッドを通してデータの読み書きをする事になります。
arch_smallpic
なので、完全に開発者向けのDBですね。
SQLのような解釈が必要な言語も要らず、プロセスとプロセス間の会話も要らないので、超高速な読み書きと、携帯電話のような小さな機器内での稼働も可能になります。
    2. 複数のAPIのサポート

機能的には、APIとしてはKey/Valueだけでなく、SQL、XML/XQuery、Java Object APIを持っています。
自分はまだ使った事ありませんが、バージョン5からSQLのAPIでのサポートが始まっています。
119920_ja
    3. 複数のレベルでのデータ読み書き

データの保存の仕方としては、最もシンプルな単なるデータ保存だけでなく、同時書き込み排他保存、トランザクションでの保存、レプリケートした保存、といったレベルを変えた保存も可能になっています。
126914_ja
同時書き込み排他にせよ、トランザクションのサポートにせよ、レプリケートのサポートにせよ、どんどん読み書きのコストが高まっていく事になるので、そこら辺を必要性に応じてどこまでするかを選び分けれるのは強みの一つですね。
一つのプロセスしかアクセスしない事が保証されているのなら、同時書き込み排他機能も使う必要はなく、より高速に使用が可能になります。
    4. 複数のデータ形式

データの保存形式としては、Hash, Btree, Recno, Queue, Heapをサポートします。
データへのアクセスの仕方と、データの形式を考えて、最適な形式を選ぶ事が出来ます。
このレベルから根本的な「チューニング」が出来るのが、Berkeley DBの一つの強みでしょう。
勿論、逆に言えば、それぞれの違いが分っていないと、十分には使いこなせないことになってしまいますが。
情報処理試験とかで勉強した知識を活用する機会となります。
    5. 利用状況

MySQLと同じく、Sleepycat社から買収される事でOracleの軍門に下ってしまいましたが、再配布しない限り、無料のオープンソースとして使える状態は続いており、開発も続けられています。
歴史としては、現時点で20年もの歴史があるDBで、UNIXがAT&Tの所有物だった時代に遡るものになります。
KV系は最近は色々と出てきていますが、個人実装のものに比べると、その継続性や信頼性については安心レベルが異なります。

日本ではWeb系ではあまり使われる例は聞いた事ありませんが、GoogleやAmazon等Web系の企業だけでなく、その小ささからOS、ルーター、ブラウザー、携帯電話等々への組込み型DBとしてもよく使われます。
Linux系には全部組み込まれているとも言えるので、というのもあるでしょうが、Oracle曰く世界中で2億以上の機器で使われているDBとなります。
最初から組込まれているのだから、ぱぱっとkey/value型を使うのならまず使用する候補になりますね。
自分の場合もあれやこれやと使わせて頂いています。

そのように、Linux系にデフォルトで付いてくることもあり、それなりにLinux系の人は縁があったりするものですが、単純なデータ読み書きは使っていても、中々それ以上(CDSロック、トランザクション、レプリケーション)といったレベルまで使っている人は、日本では少ないかもしれません。
ただ、別サーバープロセスが起動し続けて、基本的にはファイルシステム自体を守ってくれるようなものとは異なり、プログラムのプロセスと同じ所で読み書きがされるBerkeleyDBは、TCP通信とかもなく処理効率は最高クラスですが、その取り扱いはプログラム側が責を負う事になるので、適切に使わないとマルチプロセス環境ではかなり簡単に壊れてしまって、大変な事になります。
また、killする時にも、きちんと閉じるようにSIGHUPを補足するように気をつけないといけません。
そういう環境では、適切にCDSロック、場合によってはトランザクションといった仕組みを組込む必要があります。
トランザクションの使用にまでいくと、シンプルな筈のkey/value型も色々書く事が多くなってしまうので、そこら辺は使い所として考え所にもなります。

Berkeley DBに関する日本語での情報はかなり少ないので、主に英語圏の情報を読みながら使う事にはなる事は、これだけ長い歴史がありながら覚悟はしないといけません。
    6. ライセンスについて

組み込んで再配布等をする時には、その使用しているソフトのソースコードについて、開示するというオープンソースのルールに従う事が求められます。
自社のサーバーで使うというのは、再配布にはあたりません。

商用ライセンスにお金を払う場合には、ソースコードを公開する必要はありません。
但し、それなりのお値段が請求されます。

種別ソフト費用年間サポート費用課金単位
高可用性バージョン106.5万円23.4万円1プロセッサーあたり
トランザクションサポート版652円143円1組み込み機器あたり。10万機器から販売
トランザクションサポート版63万円13.9万円1プロセッサーあたり
同時書き込み排他版652円143円1組み込み機器あたり。10万機器から販売
同時書き込み排他版19.5万円4.3万円1プロセッサーあたり
書き込み排他処理無し版652円143円1組み込み機器あたり。10万機器から販売
書き込み排他処理無し版9.8万円2.2万円1プロセッサーあたり

なお、
種別ソフト費用年間サポート費用課金単位
XMLの高可用性バージョン150万円33万円1プロセッサーあたり
という形でXML版は更に高くなっています。
3. Berkeley DBの進化の歴史

Berkeley DBのプロジェクトは、メモリー内のhsearchハッシュパッケージと、ディスク上のndbmハッシュパッケージを、新しく改善されたハッシュ実装で置き換える為に始まりました。
要件としては、メモリー内でもディスク上でも使えて、自由なライセンスで使える事でした。
BerkeleyDBはバージョンを重ねる毎に以下のように進化してきました。

リリース時期バージョン内容
19911HashとBTREEをサポートしたバージョン。排他書き込み処理やトランザクションはないので自分で別途排他処理をする必要があります。1.x系はUNIX系システムには必ず組み込まれているバージョンですが、その為アプリ側の責任で守ってあげないと破損してしまう事もあり、Berkeley DBの印象をトラブルになったら手に負えない恐ろしい子...、というイメージを作る原因の一つにもなってるかなとは思います。
19972トランザクションのサポート。Netscapeからのリクエストで進化。以降ブラウザーに組み込まれて使われたり。この時、その商用サポートの為、Sleepycat社が作られました。
19993抽象化等再デザインして、機能拡張し易い形に
20014レプリケーションと高可用性の実現。つまり書き込み用Masterサーバー、複数の読み込み用Slaveサーバとした運用が出来るようになりました。
201052006年にOracleがBerkeley DBの所有権を取得してから初めてのメジャーリリース。SQLのサポート等が5系からはされる。

4. 裏側の仕組みの変化図解

ソフトウェアでは境界を定め、それを守る事が、保守性を維持する事になる。
これに従ってObject Orientedの仕組みについて述べれば、応答のAPIは同じで、その裏側が色々進化していくという事だ。

の原則を守った形で、表側ではkey/valueの仕組みは一貫して提供され続けていますが、裏側の仕組みは以下のように進化してきています。
    1. Berkeley DBの始まりとなった設計

libtp

LIBTPという無料のオープンソースなトランザクションの機能をもたらすライブラリを考えた時の設計書
http://www.aosabook.org/en/bdb.html
    2. Berkeley DB 2.0

bdb20
Process Managerがなくなりました。
    3. BerkeleyDB 2.06

bdb20-actual
リカバリー(=処理の巻き戻し)ができるようになった
    4. BerkeleyDB 5.0.21


現在のメジャーバージョン。
裏側の変更としては、レプリケーションが出来るようになったり、logモジュールがlogとdbregモジュールに分かれたり、名前空間が整理されたり、logサブシステムがカーソルベースのAPIになったり、トランザクション保護のDBの生成、削除、名称変更が出来るようになったり。
年月の積み重ねと共に、かなり線が増えている事が見えます。
5. まとめ

KV型DBはSQL系DBでは手が届かない所を補完してくれるものとして、近年になって日本では注目が増えた所はありますが、KV型DBは近年出来たわけではなく、長い歴史を持っています。
その中でもBekeley DBは使用実績から言えば王様のようなもので、それが故にOracleも買収し、開発主体もOracleという大御所が持ってくれる状態になっているので、信頼度的にはまず第一に考えうるKV型DBです。
日本では日本発のKV型DBの方に言及される事が多く、Berkeley DBが単純なKV以上にどれ程の事が出来るものになっているのか、認識があまりされていないなと思うので、その存在と1.x系からの進化について、もっと認識が進んでくれると良いな、と一利用者として思っています。
6. 参考になる資料


OracleのBerkeley DBのページ

Oracleの音声とプレゼンテーションでの説明(英語)

Berkeley DBの開発の歴史からソフトウェアの開発について知見も得るページ

このブログのBerkeley DBに関する記事
LBerkeleyDBのソースからのインストール
LC言語でのログラム例
LC++でのプログラム例 / Berkeley DBのサイズを小さくする② & 200万円超の費用削減
など

perlから使う用途のBDB::Wrapperモジュール(自分が作って使っている物の配布)
http://search.cpan.org/~hikarine/

コメントする7個


[他の記事も読む]
<=次の記事 VPS比較2019年主要VPSベンチマーク完全版
=>前の記事 事件::世の中に悪い人はいる(尼崎事件)


大分類が「Berkeley DB」の記事
この論客の記事全て
↑上へ