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

利用可能な条件: Unix, Windows.

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

Python 2.3以降の`bsddb`モジュールは、バージョン 3.1以降のBerkeley DBライブラリのみをサポートしています。(現時点では、3.1から4.1までのバー ジョンでの動作を確認しています。)

参考資料:

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

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

以下では、従来のbsddbモジュールと互換性のある、古いインターフェースを解 説しています。現在の、Db と DbEnvによるオブジェクト指向的インターフェー スについては上記 pybsddb のURLを参照してください。

警告: このインタフェースは旧式で、Python 2.3.x や以前のバージョンでは スレッド安全ではありません。マルチスレッドからアクセスを行おうとすると、 データの破壊やコアダンプ、デッドロックを引き起こすことがあります。 マルチスレッドやマルチプロセスでデータベースにアクセスする必要がある場合には、 上のリンク先にある、より新しい pybsddb インタフェースを使わねばなりません。

`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[, psize[, lorder]]]]]]]])

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

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

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

参考資料:

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

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