Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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/ に書かれている。