総合手引 | セクション 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.
“ | Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems. | ” |
— Jamie Zawinski |