EN JA
HASH(3)
HASH(3) FreeBSD Library Functions Manual HASH(3)

名称

hashhash データベースアクセス方法

書式

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

解説

ルーチン dbopen() は、データベースファイルへのライブラリインタフェースです。サポートされているファイルの形式の 1 つは、 hash ファイルです。データベースアクセス方法の一般的な説明は、 dbopen(3) にあります。このマニュアルページは、 hash 特有の情報についてのみ説明しています。

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

dbopen() で提供されるアクセス方法特有のデータ構造は、次のように < db.h> インクルードファイルに定義されています。

typedef struct { 
 u_int bsize; 
 u_int ffactor; 
 u_int nelem; 
 u_int cachesize; 
 uint32_t (*hash)(const void *, size_t); 
 int lorder; 
} HASHINFO;

この構造体の要素 (element) は、次の通りです:

bsize
bsize 要素は、 hash テーブルのバケットサイズを定義し、デフォルト値で、4096 バイトです。ディスク常駐テーブルと大きなデータ項目があるテーブルに対して、ページサイズを増加することが望ましいでしょう。
ffactor
ffactor 要素は、 hash テーブル内の望ましい密度を示します。それは、 hash テーブルが成長するか、または縮小するかどうかを決定して、任意の 1 つのバケットに蓄積することを可能にされたキーの数の近似です。デフォルト値は、8 です。
nelem
nelem 要素は、 hash テーブルの最終サイズの見積りです。設定されないか、または低く設定されるなら、 hash テーブルは、キーが入力されるとともに素直に拡張しますが、少しの性能低下に、気が付くかれるかもしれません。デフォルト値は、1 です。
cachesize
メモリキャッシュのバイト単位の推奨される最大サイズ。この値は、 単なる 勧告であり、アクセス方法は、失敗するより、より多くのメモリを割り付けます。
hash
hash 要素は、ユーザ定義の hash 関数です。 hash 関数は、すべての指定できるデータで同様にうまく行なわないので、ユーザは、組み込みの hash 関数が特別のデータセットで不完全に行うことが分かります。ユーザ指定の hash 関数は、2 つの引数 (バイト文字列へのポインタと長さ) を取る必要があり、 hash (ハッシュ) 値として使用される 32 ビット量を返します。
lorder
格納されたデータベースのメタデータの整数のバイト順。数値は、整数としての順序を表すべきです。例えば、ビッグエンディアンの順序は、数値 4,321 となるでしょう。 lorder が 0 (順序が指定されない) のなら、現在のホストの順序が使用されます。ファイルが既に存在しているなら、指定された値は、無視され、ツリーが作成されたときに指定された値が使用されます。

ファイルが既に存在し、(そして、 O_TRUNC フラグが指定されてないなら)、 bsize, ffactor, lordernelem 引数に指定された値は、無視され、ツリーが作成されたときに指定された値が使用されます。

hash 関数が指定されるなら、 hash_open() は、指定された hash 関数がデータベースが作成されたものと同じかどうかを確認し、そうでなければ、失敗します。

より古い dbmndbm ルーチンへの後方互換性のインタフェースが、提供されていますが、これらのインタフェースは、前のファイル形式と互換性がありません。

エラー

hash アクセス方法ルーチンは、失敗し、ライブラリルーチン dbopen(3) で明記されたエラーのいずれかの値が 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.

バグ

ビッグエンディアンとリトルエンディアンのバイト順のみ、サポートされています。
August 18, 1994 FreeBSD