# 11 `bsddb` -- Berkeley DB ライブラリへのインタフェース

Unix, Windowsプラットフォームで利用できます。

`bsddb` モジュールは Berkeley DB ライブラリへのインタフェース を提供します。ユーザは適当な `open` 呼び出しを使うことで、 ハッシュ、B-Tree、 またはレコードに基づくデータベースファイルを生成 することができます。bsddb オブジェクトは辞書と大体同じように振る舞い ます。しかし、キー及び値は文字列でなければならないので、 他のオブジェクトをキーとして使ったり、他の種のオブジェクトを記録 したい場合、それらのデータを何らかの方法で直列化しなければなりません。 これには通常 `marshal.dumps()` や `pickle.dumps()` が使われます。

`bsddb` モジュールは、バージョン 3.3 から 4.4 までの間の Berkeley DB ライブラリを必要とします。

参考:

http://pybsddb.sourceforge.net/
  Berkeley DBインターフェース `bsddb.db` のドキュメントがあります。新しいインターフェースは、Berkeley DB 3と4でSleepycatが提供しているオブジェクト指向インターフェースとほぼ 同じインターフェースとなっています。

http://www.sleepycat.com/
  Sleepycat Software は、 Berkeley DBライブラリを開発しています。

より新しい DB である DBEnv や DBSequence オブジェクトのインターフェースも `bsddb.db` モジュールで使用できます。これは、上の URL で説明されている Sleepycat Berkeley DB C API によりマッチしています。`bsddb.db` API が提供する追加機能には、チューニングやトランザクション、 ログ出力、マルチプロセス環境でのデータベースへの同時アクセスなどがあります。

以下では、従来のbsddbモジュールと互換性のある、古いインターフェースを解 説しています。Python 2.5 以降、このインターフェースはマルチスレッドに対応しています。 マルチスレッドを使用する場合は `bsddb.db` API を推奨します。 こちらのほうがスレッドをよりうまく制御できるからです。

`bsddb` モジュールでは、適切な形式の Berkeley DB ファイルに アクセスするオブジェクトを生成する以下の関数を定義しています。 各関数の最初の二つの引数は同じです。可搬性のために、ほとんどの インスタンスでは最初の二つの引数だけが使われているはずです。

`hashopen`( | filename[, flag[, mode[, bsize[, ffactor[, nelem[, cachesize[, hash[, lorder]]]]]]]])

  filename と名づけられたハッシュ形式のファイルを開きます。 filename に `None` を指定することで、ディスクに保存する つもりがないファイルを生成することもできます。 オプションの flag には、ファイルを開くためのモードを指定します。 このモードは "`r`" (読み出し専用), "`w`" (読み書き可能)、 "`c`" (読み書き可能 - 必要ならファイルを生成 … これがデフォルトです) または "`n`" (読み書き可能 - ファイル長を 0 に切り詰め)、にすることが できます。他の引数はほとんど使われることはなく、下位レベルの `dbopen()` 関数に渡されるだけです。他の引数の使い方 およびその解釈については Berkeley DB のドキュメントを読んで下さい。

`btopen`( | filename[, flag[, mode[, btflags[, cachesize[, maxkeypage[, minkeypage[, pgsize[, lorder]]]]]]]])

  filename と名づけられた B-Tree 形式のファイルを開きます。 filename に `None` を指定することで、ディスクに保存する つもりがないファイルを生成することもできます。 オプションの flag には、ファイルを開くためのモードを指定します。 このモードは "`r`" (読み出し専用)、 "`w`" (読み書き可能)、 "`c`" (読み書き可能 - 必要ならファイルを生成 … これがデフォルトです)、または "`n`" (読み書き可能 - ファイル長を 0 に切り詰め)、にすることが できます。他の引数はほとんど使われることはなく、下位レベルの `dbopen()` 関数に渡されるだけです。他の引数の使い方 およびその解釈については Berkeley DB のドキュメントを読んで下さい。

`rnopen`( | filename[, flag[, mode[, rnflags[, cachesize[, pgsize[, lorder[, reclen[, bval[, bfname]]]]]]]]])

  filename と名づけられた DB レコード形式のファイルを開きます、 filename に `None` を指定することで、ディスクに保存する つもりがないファイルを生成することもできます、 オプションの flag には、ファイルを開くためのモードを指定します、 このモードは "`r`" (読み出し専用), "`w`" (読み書き可能)、 "`c`" (読み書き可能 - 必要ならファイルを生成 … これがデフォルトです)、または "`n`" (読み書き可能 - ファイル長を 0 に切り詰め)、にすることが できます。他の引数はほとんど使われることはなく、下位レベルの `dbopen()` 関数に渡されるだけです、他の引数の使い方 およびその解釈については Berkeley DB のドキュメントを読んで下さい。

注意: 2.3以降の Unix 版Pythonには、`bsddb185`モジュールが存在する場合があ ります。このモジュールは古いBerkeley DB 1.85データベースライブラリを持つ システムをサポートするためだけに存在しています。新規に開発する コードでは、`bsddb185`を直接使用しないで下さい。

参考:

`dbhash`:モジュール
  `bsddb` への DBM 形式のインタフェース.