Rechercher une page de manuel
hash
Langue: ja
Version: 1994-08-18 (mandriva - 01/05/08)
Section: 3 (Bibliothèques de fonctions)
名前
hash - hash データベースへのアクセスメソッド書式
#include <sys/types.h> #include <db.h>
説明
ルーチン dbopen() はデータベースファイルに対するライブラリインターフェースである。 サポートされているファイルフォーマットのひとつに hash ファイルがある。 データベースへのアクセスメソッドに関する一般的な記述は dbopen(3) に書かれている。 このマニュアルページでは hash 特有の情報についてのみ記述する。hash データ構造は、拡張可能な動的ハッシュスキームである。
dbopen に渡される hash アクセスメソッドに特有のデータ構造体は、 <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;
この構造体の要素を以下に示す。
- bsize
- bsize は hash テーブルバケット (table bucket) のサイズを定義する。 デフォルトは 256 バイトである。 ディスクに置かれるテーブルやデータアイテムが大きいテーブルでは ページサイズを大きくするほうが良いだろう。
- ffactor
- ffactor は、ユーザが望む hash テーブル中の密度である。 これはそれぞれのバケットに格納できるキーの概数であり、 hash テーブルを拡大・縮小を作用する。 デフォルトは 8 である。
- nelem
- nelem は hash テーブルの最終サイズを大まかに見積もった値である。 この値がセットされていなかったり、あまりに低くセットされていると、 hash テーブルはキーが入ってくるに応じて拡張される。 しかし少しパフォーマンスが (おそらく気付く程度に) 落ちる。 デフォルト値は 1 である。
- cachesize
- この値は あくまで 参考であり、アクセスメソッドはこの値を越えたメモリの 割り当てに成功することもある。
- hash
- hash はユーザー定義の hash 関数である。 全てのデータに対してうまく作用する hash 関数と言うのはないから、 特定のデータセットに対しては組み込みの hash 関数では パフォーマンスが低いこともあるかもしれない。 ユーザー定義の hash 関数は二つの引数をとらなくてはならない (バイト文字 列へのポインタと、長さ)。 そして hash 値として使われる 32ビットの値を返さなくてはならない。
- lorder
- データベースに格納されているメタデータの整数値のバイトオーダー。 この数字は、順序を整数で表したものである。 例えばビッグエンディアンなら、この数値は 4,321 となる。 lorder が 0 (指定されていない)場合、現在のホスト で使われている並び順が使われる。 ファイルが既に存在する場合、指定した値は無視されツリーが作られ た時に指定されていた値が使われる。
ファイルが既に存在している (または O_TRUNC フラグが指定されていない) と、 パラメータ bsize, ffactor, lorder, nelem に指定されたは無視され、 ハッシュが作られた時に使った値が使われる。
hash 関数が指定されると、 hash_open はデータベースが作られた時に指定されていた hash 関数と今回指定された hash 関数が同じかどうかを調べ、 同じでない場合には失敗する。
dbm(3), と ndbm(3) に記述されているルーチンへの過去互換を取るためのインターフェイスが 存在する。しかしこれらのインターフェイスは以前のファイルフォー マットとは互換性がない。
エラー
hash アクセスメソッドルーチンは、失敗するとライブラリルーチン 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.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre