HASH

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

hash - hash データベース アクセス方式  

索引

書式

In sys/types.h In db.h  

索引

解説

Fn dbopen ルーチンは、データベースファイルへのライブラリインタフェースです。 サポート対象のファイル形式の一つは ファイルです。本マニュアルの dbopen(3) にあるデータベースアクセス方式の一般的な解説は に書かれており、 固有の情報だけを説明しています。

データ構造は拡張可能な動的ハッシュスキーマです。

Fn dbopen に与えられるアクセス方式固有のデータ構造体は インクルードファイル Aq Pa 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 は、 表のバケットサイズを定義し、デフォルト値で 256 バイトです。 ディスク常駐テーブルと大型データ項目については、 ページサイズを拡大したほうが望ましいかもしれません。
ffactor
ffactor 表内の望ましい密度を表示します。 これは一つのバケット内に累積可能なキー数の概算であり、 いつ 表の拡大や縮小を行なうべきかを決定します。 デフォルト値は 8 です。
nelem
nelem 表の最終サイズの推測値です。 未設定あるいは低い値に設定されると、わずかな性能劣化が見られる かもしれませんが、ハッシュ表はキー入力に応じて円滑に拡張されます。 デフォルト値は 1 です。
cachesize
メモリキャッシュの推奨最大バイトサイズです。 この値は 単なる 提言であり、このアクセス方式は、 失敗するよりはメモリを余計に割り当てるでしょう。
hash
hash はユーザ定義の 関数です。 可能なデータすべてに対して等しく性能の良い 関数はないため、 ユーザは、組み込み 関数が特定データセットに充分な性能が出ないことに 気がつくことがあるかもしれません。 ユーザ指定 関数は 2 個の引数 (文字列へのポインタと長さ) を取り、 ハッシュ値として使われる 32 ビット量を返します。
lorder
保存されたデータベースメタデータ 内の整数のバイトオーダです。 数字は整数としての順序を表していなければなりません。 例えば、ビッグエンディアンの順序は 4,321 になります。 lorder が 0 (順序指定なし) の時は現行のホストのオーダが使われます。 ファイルがあらかじめ存在していれば、指定値が無視されて、 ツリーが構築された時に指定された値が使われます。

ファイルがあらかじめ存在し、(かつ O_TRUNC フラグが指定されてないと) 、 bsize , ffactor , lorder , nelem の各パラメータに指定された値は無視され、 ツリーの構築時に指定された値が使われます。

関数が指定されていると、 Fn hash_open は指定された 関数がデータベース作成時と同じものであるかを判別し、 異なっていれば open に失敗します。

dbm および旧 ndbm ルーチンへの下位互換インタフェースが提供されていますが、 これらのインタフェースは従来のファイルフォーマットとは互換ではありません。  

索引

エラー

ライブラリルーチン dbopen(3) で指定されている任意のエラーに対し、 アクセス方式ルーチンが失敗すると、 errno をセットします。  

索引

関連項目

btree(3), dbopen(3), mpool(3), recno(3)
"Dynamic Hash Tables" Per-Ake Larson "Communications of the ACM" April 1988
"A New Hash Package for UNIX" Margo Seltzer "USENIX Proceedings" Winter 1991
 

索引

バグ

バイトオーダとして、ビッグエンディアンとリトルエンディアンだけが サポートされています。


 

索引

Index

名称
書式
解説
エラー
関連項目
バグ

jman



Time: 07:06:54 GMT, January 12, 2009