総合手引 | セクション 3 | English | オプション |
#include <sys/types.h>
#include <db.h>
hash データ構造は拡張可能な動的ハッシュスキーマです。
dbopen() に与えられるアクセス方式固有のデータ構造体は インクルードファイル < db.h> で以下のように定義されます。
typedef struct { u_int bsize; u_int ffactor; u_int nelem; u_int cachesize; u_int32_t (*hash)(const void *, size_t); int lorder; } HASHINFO;
この構造体のフィールドは以下になります。
bsize | |
bsize は、 hash 表のバケットサイズを定義し、デフォルト値で 256 バイトです。 ディスク常駐テーブルと大型データ項目については、 ページサイズを拡大したほうが望ましいかもしれません。 | |
ffactor | |
ffactor は hash 表内の望ましい密度を表示します。 これは一つのバケット内に累積可能なキー数の概算であり、 いつ hash 表の拡大や縮小を行なうべきかを決定します。 デフォルト値は 8 です。 | |
nelem | |
nelem は hash 表の最終サイズの推測値です。 未設定あるいは低い値に設定されると、わずかな性能劣化が見られる かもしれませんが、ハッシュ表はキー入力に応じて円滑に拡張されます。 デフォルト値は 1 です。 | |
cachesize | |
メモリキャッシュの推奨最大バイトサイズです。 この値は 単なる 提言であり、このアクセス方式は、 失敗するよりはメモリを余計に割り当てるでしょう。 | |
hash | |
hash はユーザ定義の hash 関数です。 可能なデータすべてに対して等しく性能の良い hash 関数はないため、 ユーザは、組み込み hash 関数が特定データセットに充分な性能が出ないことに 気がつくことがあるかもしれません。 ユーザ指定 hash 関数は 2 個の引数 (文字列へのポインタと長さ) を取り、 ハッシュ値として使われる 32 ビット量を返します。 | |
lorder | |
保存されたデータベースメタデータ 内の整数のバイトオーダです。 数字は整数としての順序を表していなければなりません。 例えば、ビッグエンディアンの順序は 4,321 になります。 lorder が 0 (順序指定なし) の時は現行のホストのオーダが使われます。 ファイルがあらかじめ存在していれば、指定値が無視されて、 ツリーが構築された時に指定された値が使われます。 | |
ファイルがあらかじめ存在し、(かつ O_TRUNC フラグが指定されてないと) 、 bsize, ffactor, lorder, nelem の各パラメータに指定された値は無視され、 ツリーの構築時に指定された値が使われます。
hash 関数が指定されていると、 hash_open() は指定された hash 関数がデータベース作成時と同じものであるかを判別し、 異なっていれば open に失敗します。
旧 dbm および旧 ndbm ルーチンへの下位互換インタフェースが提供されていますが、 これらのインタフェースは従来のファイルフォーマットとは互換ではありません。
Communications of the ACM, Dynamic Hash Tables, April 1988.
,USENIX Proceedings, A New Hash Package for UNIX, Winter 1991.
,HASH (3) | August 18, 1994 |
総合手引 | セクション 3 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | A typical Unix /bin or /usr/bin directory contains a hundred different kinds of programs, written by dozens of egotistical programmers, each with its own syntax, operating paradigm, rules of use ... strategies for specifying options, and different sets of constraints. | ” |
— The Unix Haters' handbook |