jpman project specific RCS keyword (jpman %Id) is obsolete, after manual entries are stored in freefall CVS repository. This old Id is useless and more worse it confuses users and bug reporters. So, this old Id is removed. Submitted by:jpman project <man-jp@jp.FreeBSD.org>
167 lines
5.1 KiB
Groff
167 lines
5.1 KiB
Groff
.\" Copyright (c) 1990, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)hash.3 8.6 (Berkeley) 8/18/94
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.TH HASH 3 "August 18, 1994"
|
|
.UC 7
|
|
.SH 名称
|
|
hash \- hash データベース アクセス方式
|
|
.SH 書式
|
|
.nf
|
|
.ft B
|
|
#include <sys/types.h>
|
|
#include <db.h>
|
|
.ft R
|
|
.fi
|
|
.SH 解説
|
|
.I dbopen
|
|
ルーチンは、データベースファイルへのライブラリインタフェースです。
|
|
サポート対象のファイル形式の一つは
|
|
.I hash
|
|
ファイルです。本マニュアルの
|
|
.IR dbopen (3)
|
|
にあるデータベースアクセス方式の一般的な解説は
|
|
に書かれており、
|
|
.I hash
|
|
固有の情報だけを説明しています。
|
|
.PP
|
|
.I hash
|
|
データ構造は拡張可能な動的ハッシュスキーマです。
|
|
.PP
|
|
dbopn に与えられるアクセス方式固有のデータ構造体は
|
|
インクルードファイル <db.h> で以下のように定義されます。
|
|
.sp
|
|
typedef struct {
|
|
.RS
|
|
u_int bsize;
|
|
.br
|
|
u_int ffactor;
|
|
.br
|
|
u_int nelem;
|
|
.br
|
|
u_int cachesize;
|
|
.br
|
|
u_int32_t (*hash)(const void *, size_t);
|
|
.br
|
|
int lorder;
|
|
.RE
|
|
} HASHINFO;
|
|
.PP
|
|
この構造体のフィールドは以下になります。
|
|
.TP
|
|
bsize
|
|
.I bsize
|
|
は、ハッシュ表のバケットサイズを定義し、デフォルト値で 256 バイトです。
|
|
ディスク常駐テーブルと大型データ項目については、
|
|
ページサイズを拡大したほうが望ましいかもしれません。
|
|
.TP
|
|
ffactor
|
|
.I ffactor
|
|
は
|
|
.I hash
|
|
表内の望ましい密度を表示します。
|
|
これは一つのバケット内に累積可能なキー数の概算であり、
|
|
いつハッシュ表の拡大や縮小を行なうべきかを決定します。
|
|
デフォルト値は 8 です。
|
|
.TP
|
|
nelem
|
|
.I nelem
|
|
は
|
|
ハッシュ表の最終サイズの推測値です。
|
|
未設定あるいは低い値に設定されると、わずかな性能劣化が見られる
|
|
かもしれませんが、ハッシュ表はキー入力に応じて円滑に拡張されます。
|
|
デフォルト値は 1 です。
|
|
.TP
|
|
cachesize
|
|
メモリキャッシュの推奨最大バイトサイズです。
|
|
この値は単なる提言であり、このアクセス方式は、
|
|
失敗するよりはメモリを余計に割り当てるでしょう。
|
|
.TP
|
|
hash
|
|
.I hash
|
|
はユーザ定義のハッシュ関数です。
|
|
可能なデータすべてに対して等しく性能の良いハッシュ関数はないため、
|
|
ユーザは、組み込みハッシュ関数が特定データセットに充分な性能が出ないことに
|
|
気がつくことがあるかもしれません。
|
|
ユーザ指定ハッシュ関数は 2 個の引数 (文字列へのポインタと長さ) を取り、
|
|
ハッシュ値として使われる 32 ビット量を返します。
|
|
.TP
|
|
lorder
|
|
保存されたデータベースメタデータ
|
|
内の整数のバイトオーダです。
|
|
数字は整数としての順序を表していなければなりません。
|
|
例えば、ビッグエンディアンの順序は 4,321 になります。
|
|
.I lorder
|
|
が
|
|
0 (順序指定なし) の時は現行のホストのオーダーが使われます。
|
|
ファイルがあらかじめ存在していれば、指定値が無視されて、
|
|
ツリーが構築された時に指定された値が使われます。
|
|
.PP
|
|
ファイルがあらかじめ存在し、(かつ O_TRUNC フラグが指定されてないと) 、
|
|
bsize, ffactor, lorder, nelem の各パラメータに指定された値は無視され、
|
|
ツリーの構築時に指定された値が使われます。
|
|
.PP
|
|
ハッシュ関数が指定されていると、
|
|
.I hash_open
|
|
は指定されたハッシュ関数がデータベース作成時と同じものであるかを判別し、
|
|
異なっていれば open に失敗します。
|
|
.PP
|
|
旧
|
|
.I dbm
|
|
および旧
|
|
.I ndbm
|
|
ルーチンへの下位互換インタフェースが提供されていますが、
|
|
これらのインタフェースは従来のファイルフォーマットとは互換ではありません。
|
|
.SH エラー
|
|
ライブラリルーチン
|
|
.IR dbopen (3)
|
|
で指定されている任意のエラーに対し、
|
|
.I hash
|
|
アクセス方式ルーチンが失敗すると、
|
|
.I errno
|
|
をセットします。
|
|
.SH 関連項目
|
|
.IR btree (3)
|
|
.IR dbopen (3)
|
|
.IR mpool (3)
|
|
.IR recno (3)
|
|
.sp
|
|
.sp
|
|
.IR "Dynamic Hash Tables" ,
|
|
Per-Ake Larson, Communications of the ACM, April 1988.
|
|
.sp
|
|
.IR "A New Hash Package for UNIX" ,
|
|
Margo Seltzer, USENIX Proceedings, Winter 1991.
|
|
.SH バグ
|
|
バイトオーダとして、ビッグエンディアンとリトルエンディアンだけが
|
|
サポートされています。
|