Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_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 プロジェクトのリリース 3.65 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。