Berkeley DB
アクセス記録[推移 / PV内訳(過去1日 / 過去1週間) / 外部アクセス元 (昨日 / 過去1週間) / ログイン論客足跡]
私書() / / | 評価( /) 投票 /共: / | ファン登録 // | DB構築() | ブログ [書く] |
---|
|
1. 2012/10/31 「Berkeley DB > 紹介 > Berkeley DBの進化の歴史」 [この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)]拍手:8個 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のライブラリのメソッドを通してデータの読み書きをする事になります。 ![]() なので、完全に開発者向けのDBですね。 SQLのような解釈が必要な言語も要らず、プロセスとプロセス間の会話も要らないので、超高速な読み書きと、携帯電話のような小さな機器内での稼働も可能になります。 2. 複数のAPIのサポート 機能的には、APIとしてはKey/Valueだけでなく、SQL、XML/XQuery、Java Object APIを持っています。 自分はまだ使った事ありませんが、バージョン5からSQLのAPIでのサポートが始まっています。 ![]() 3. 複数のレベルでのデータ読み書き データの保存の仕方としては、最もシンプルな単なるデータ保存だけでなく、同時書き込み排他保存、トランザクションでの保存、レプリケートした保存、といったレベルを変えた保存も可能になっています。 ![]() 同時書き込み排他にせよ、トランザクションのサポートにせよ、レプリケートのサポートにせよ、どんどん読み書きのコストが高まっていく事になるので、そこら辺を必要性に応じてどこまでするかを選び分けれるのは強みの一つですね。 一つのプロセスしかアクセスしない事が保証されているのなら、同時書き込み排他機能も使う必要はなく、より高速に使用が可能になります。 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. ライセンスについて 組み込んで再配布等をする時には、その使用しているソフトのソースコードについて、開示するというオープンソースのルールに従う事が求められます。 自社のサーバーで使うというのは、再配布にはあたりません。 商用ライセンスにお金を払う場合には、ソースコードを公開する必要はありません。 但し、それなりのお値段が請求されます。
なお、
3. Berkeley DBの進化の歴史 Berkeley DBのプロジェクトは、メモリー内のhsearchハッシュパッケージと、ディスク上のndbmハッシュパッケージを、新しく改善されたハッシュ実装で置き換える為に始まりました。 要件としては、メモリー内でもディスク上でも使えて、自由なライセンスで使える事でした。 BerkeleyDBはバージョンを重ねる毎に以下のように進化してきました。
4. 裏側の仕組みの変化図解
の原則を守った形で、表側ではkey/valueの仕組みは一貫して提供され続けていますが、裏側の仕組みは以下のように進化してきています。 1. Berkeley DBの始まりとなった設計 ![]() LIBTPという無料のオープンソースなトランザクションの機能をもたらすライブラリを考えた時の設計書 http://www.aosabook.org/en/bdb.html 2. Berkeley DB 2.0 ![]() Process Managerがなくなりました。 3. BerkeleyDB 2.06 ![]() リカバリー(=処理の巻き戻し)ができるようになった 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/
2. 2010/12/06 「Berkeley DB > perl > BDB-Wrapper-0.38リリース」 [この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)] 今はOracleから提供されているKey/Value型DBのBerkeleyDBをperlから簡単に使う為のモジュール、BDB::Wrapperのバージョン0.38をリリースしました。 一番大きな変更はトランザクションのサポートです。 今までCDSロックで対応させてきたけど、一応必要な事もあるかなと対応させました。 また、Podの文章も文法の基礎も理解せず書いていた所を直して、例文を読み易いように代えてあります。 その他clear_bdb_home()メソッド追加など。 http://search.cpan.org/~hikarine/ 基本的な使用方法
トランザクションを使った例
3. 2010/08/16 「Berkeley DB > perl > BDB-Wrapper-0.32リリース」 [この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)] BDB-Wrapper-0.32をリリースしました。 http://search.cpan.org/~hikarine/ に表示されるにはタイムラグがありますが、24時間以内に現れる筈です。 すぐにダウンロードされたい方は http://www.cpan.org/authors/id/H/HI/HIKARINE/ から得る事が出来ます。 record_error($msg); というメソッドが加わっています。 これを使うと$msgの内容と時間のセットを /tmp/bdb_error.log に追記出来ます。
といった形に使う事を想定しています。
4. 2010/07/21 同日3番目 「Berkeley DB > perl > BDB-Wrapper-0.31リリース」 [この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)] 0.31リリースしました。 バグフィックスです。 Fixed the bug of rmkdir($bdb_dir) for create_write_dbh ふとツイッターで呟いてあげてなかったなぁ、と思いついたので、 http://search.cpan.org/~hikarine/ へのアップ自体は2010/08/12/
5. 2009/12/03 同日2番目 「Berkeley DB > perl > BDB-Wrapper-0.30リリース」 [この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)] 大規模サイト向けとしてkey/value型DBがそのパフォーマンスの良さから脚光を浴びるようになってきていますが(パフォーマンスの良さはSQL文もサーバープロセスも要らないので当然といえば当然)、世界で見ると一番使われているのはBerkeleyDBというOracleによってSleepycat社から買収されたDBです。 当サイトではSQL DBは使わずDB系ではBerkeleyDBのみ使っていますが、BerkeleyDB.pmを適切なパラメーターで簡単に使う為のラッパーモジュールBDB::Wrapper-0.30をリリースしました。 ダウンロードは以下のURLから出来ます。 http://search.cpan.org/~hikarine/ rootになって
=>前の記事 |