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 の方が好適です。

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

% make tidy
% CDB=../../../tinycdb-0.5
% make -f Makefile.init makefiles "CCARGS=-DHAS_CDB -I$CDB" \
    "AUXLIBS=$CDB/libcdb.a"
% make

代わりにD.J.BバージョンのCDBを使うには以下のようにします:

% 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) サービスの永続的アドレス検証キャッシュの保存したり、tlsmgr(8) サービスのTLSセッション情報を保存するのには使えません。