HASH
Section: Linux Programmer's Manual (3)
Updated: 1994-08-18
Index
JM Home Page
roff page
名前
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;
} HASHINFO;
この構造体の要素を以下に示す。
- 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.
Index
- 名前
-
- 書式
-
- 説明
-
- エラー
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:45 GMT, November 19, 2007