Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
hash - hash データベースへのアクセスメソッド
書式
#include <sys/types.h> #include <db.h>
説明
大事な注意: このページは、バージョン 2.1 までの glibc が提供するインターフェースに ついて 説明している。バージョン 2.2 以降の glibc では、もはやこれらの インターフェースは提供され ていない。おそらく、このページではなく、 libdb ライブラリが提供する API をお探しなのだろ う。 ルーチン dbopen(3) はデータベースファイルに対するライブラリインターフェースである。 サ ポートされているファイルフォーマットのひとつに hash ファイルがある。 データベースへのアク セスメソッドに関する一般的な記述は dbopen(3) に書かれている。 このマニュアルページでは hash 特有の情報についてのみ記述する。 hash データ構造は、拡張可能な動的ハッシュスキームである。 dbopen(3) に渡される hash アクセスメソッドに特有のデータ構造体は、 <db.h> インクルード ファイルで以下のように定義されている。 typedef struct { unsigned int bsize; unsigned int ffactor; unsigned int nelem; unsigned int cachesize; uint32_t (*hash)(const void *, size_t); int lorder; } HASHINFO; この構造体の要素を以下に示す。 bsize hash テーブルバケット (table bucket) のサイズを定義する。 デフォルトは 256 バイ トである。 ディスクに置かれるテーブルやデータアイテムが大きいテーブルでは ページ サイズを大きくするほうが良いだろう。 ffactor ユーザーが望む hash テーブル中の密度である。 これはそれぞれのバケットに格納でき るキーの概数であり、 hash テーブルを拡大・縮小を作用する。 デフォルトは 8 であ る。 nelem hash テーブルの最終サイズを大まかに見積もった値である。 この値がセットされていな かったり、あまりに低くセットされていると、 hash テーブルはキーが入ってくるに応じ て拡張される。 しかし少しパフォーマンスが (おそらく気付く程度に) 落ちる。 デフォ ルト値は 1 である。 cachesize メモリーキャッシュの最大値 (バイト単位) の参考値。 この値は あくまで参考であり、 アクセスメソッドはこの値を越えたメモリーの割り当てに成功することもある。 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.
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。