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
- 名称
-
- 書式
-
- 解説
-
- エラー
-
- 関連項目
-
- バグ
-
Time: 07:06:54 GMT, January 12, 2009