スポンサーリンク

HASH(3) FreeBSD ライブラリ関数マニュアル HASH(3)

名称

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

書式

#include <sys/types.h>
#include <db.h>

解説

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

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 ルーチンへの下位互換インタフェースが提供されています が、これらのインタフェースは従来のファイルフォーマットとは互換ではありま せん。

エラー

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

関連項目

btree(3), dbopen(3), mpool(3), recno(3)

       Per-Ake Larson,                         Dynamic Hash Tables,                                                Communications of the ACM,     April 1988.
       Margo Seltzer,                        A New Hash Package for UNIX,                                                       USENIX Proceedings,     Winter 1991.

バグ

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

FreeBSD 10.0 August 18, 1994 FreeBSD 10.0

スポンサーリンク