Postfix CDB Howto


はじめに

CDB (Constant DataBase) はDaniel Bernsteinによって設計された、 インデックス化されたファイル形式です。CDBは特に読み込みアクセスに最適化 されており、それぞれのレコードは最大2回のディスクアクセスで読み込めることを 保証しています。これは増分更新のサポートをなくすことで実現しています: 単一レコードの挿入や削除はサポートされていません。CDBデータベースは最初から 完全に再構築することでのみ変更でき、そのため名前に "constant (不変)" という 修飾子がついています。

Postfix CDBデータベースは "cdb:name" のように指定します。ここで、 name には ".cdb" 拡張子のないCDBファイル名を指定します (その他の拡張子 ".tmp" が CDBファイルの構築時に一時的に使われます)。CDBデータベースは postmap(1) または postalias(1) コマンドで管理します。 DATABASE_README ドキュメントには一般的な Postfixデータベースの情報があります。

CDBサポートはPostfix 2.2以降のリリースで使えます。このドキュメントは CDBサポート付きでPostfixを構築する方法を記述しています。

CDB付きでPostfixを構築する

Postfixは2つのCDBの実装と互換性があります:

tinycdb の方が若干速く、便利な機能が付いており、使用方法がシンプルなので、 tinycdb の方が好適です。

CDBのインストール後にPostfixをビルドするには、次のようなものを使います:

% make tidy
% CDB=../../../tinycdb-0.5
% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
    "AUXLIBS=$CDB/libcdb.a"
% make
tinycdb ではこのようにします。また代わりにD.J.Bバージョンでは以下のように します:
% make tidy
% CDB=../../../cdb-0.75
% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
    "AUXLIBS=$CDB/cdb.a $CDB/alloc.a $CDB/buffer.a $CDB/unix.a $CDB/byte.a"
% make

cdbサポート付きでpostfixをビルドしたら、リードオンリーの "hash" や "btree"、 "dbm" テーブルを使えるところで "cdb" テーブルが使えます。しかし、 "postmap -i" (増分レコード挿入) や "postmap -d" (増分レコード 削除) コマンドラインオプションは使えません。同じ理由で "cdb" マップ形式は verify(8) サービスの永続的アドレス検証キャッシュの 保存に使うことはできません。