tail head cat sleep
QR code linking to this page

manページ  — HASH

名称

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
  ffactorhash 表内の望ましい密度を表示します。 これは一つのバケット内に累積可能なキー数の概算であり、 いつ hash 表の拡大や縮小を行なうべきかを決定します。 デフォルト値は 8 です。
nelem
  nelemhash 表の最終サイズの推測値です。 未設定あるいは低い値に設定されると、わずかな性能劣化が見られる かもしれませんが、ハッシュ表はキー入力に応じて円滑に拡張されます。 デフォルト値は 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, Communications of the ACM, Dynamic Hash Tables, April 1988.

Margo Seltzer, USENIX Proceedings, A New Hash Package for UNIX, Winter 1991.

バグ

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

HASH (3) August 18, 1994

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

A typical Unix /bin or /usr/bin directory contains a hundred different kinds of programs, written by dozens of egotistical programmers, each with its own syntax, operating paradigm, rules of use ... strategies for specifying options, and different sets of constraints.
— The Unix Haters' handbook