fc733ebccd
This section is based on catpages contributed by Mainichi Communications, Inc. Translated by: MYCOM team Converted by: Japanese Online Manual Project <man-jp@jp.FreeBSD.ORG> Submitted by: Kazuo Horikawa <k-horik@yk.rim.or.jp>
240 lines
7.8 KiB
Groff
240 lines
7.8 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.
|
|
.\"
|
|
.\" @(#)btree.3 8.4 (Berkeley) 8/18/94
|
|
.\"
|
|
.\" jpman %Id%
|
|
.\"
|
|
.TH BTREE 3 "August 18, 1994"
|
|
.\" .UC 7
|
|
.SH 名称
|
|
btree \- btree データベースアクセス方式
|
|
.SH 書式
|
|
.nf
|
|
.ft B
|
|
#include <sys/types.h>
|
|
#include <db.h>
|
|
.ft R
|
|
.fi
|
|
.SH 解説
|
|
ルーチン
|
|
.IR dbopen
|
|
は、データベースファイルへのライブラリインタフェースです。
|
|
サポートされているファイル形式の 1 つは btree ファイルです。
|
|
データベースアクセス方式の一般的な説明は
|
|
.IR dbopen(3)
|
|
にあります。このマニュアルページは、
|
|
btree に固有の情報についてだけ説明しています。
|
|
.PP
|
|
btree データ構造は、関連するキー / データのペアを格納する、
|
|
ソート済みのバランスのとれたツリー構造です。
|
|
.PP
|
|
.I dbopen
|
|
に提供される btree アクセス方式に固有のデータ構造は、
|
|
次のように <db.h> インクルードファイルに定義されています。
|
|
.PP
|
|
typedef struct {
|
|
.RS
|
|
u_long flags;
|
|
.br
|
|
u_int cachesize;
|
|
.br
|
|
int maxkeypage;
|
|
.br
|
|
int minkeypage;
|
|
.br
|
|
u_int psize;
|
|
.br
|
|
int (*compare)(const DBT *key1, const DBT *key2);
|
|
.br
|
|
size_t (*prefix)(const DBT *key1, const DBT *key2);
|
|
.br
|
|
int lorder;
|
|
.RE
|
|
} BTREEINFO;
|
|
.PP
|
|
この構造体のエレメントは次のとおりです。
|
|
.TP
|
|
flags
|
|
flag の値は以降の値の
|
|
.IR or
|
|
(論理和) を取ることによって定義されます。
|
|
.RS
|
|
.TP
|
|
R_DUP
|
|
ツリー内部に重複したキーを許容します。
|
|
すなわち、挿入するキーが
|
|
ツリー内に既に存在する場合にも挿入を許容します。
|
|
.IR dbopen(3)
|
|
に記述されたデフォルトの動作としては、
|
|
新しいキーを挿入するときに一致するキーを上書きするか、
|
|
または R_NOOVERWRITE フラグが指定されている場合は処理失敗します。
|
|
R_DUP フラグは R_NOOVERWRITE フラグによって上書きされ、
|
|
R_NOOVERWRITE フラグが指定されている場合は、
|
|
重複するキーをツリーに挿入しようとする処理が失敗します。
|
|
.IP
|
|
データベースに重複したキーが含まれている場合、
|
|
.I get
|
|
ルーチンを使用すると、
|
|
キー / データのペアの取り出しの順序は未定義になります。
|
|
しかし、R_CURSOR フラグを設定して
|
|
.I seq
|
|
ルーチンを呼び出すと、
|
|
重複したキーの論理的な ``最初'' が必ず返されます。
|
|
.RE
|
|
.TP
|
|
cachesize
|
|
メモリキャッシュの示唆する最大サイズ (バイト単位)。
|
|
この値は
|
|
.B 単に
|
|
アドバイスにすぎず、
|
|
アクセス方式は処理失敗せずに多くのメモリを割り振ります。
|
|
各検索がツリーのルートページを調査するので、
|
|
最も最近に使用されたページをキャッシュすると、
|
|
アクセス時間が短くなります。
|
|
さらに、物理的な書き込みは可能な限り遅延されるので、
|
|
適度なキャッシュは入出力操作の回数を大幅に減少できます。
|
|
明らかに、キャッシュを使用すると、
|
|
ツリーを修正している間にシステムがクラッシュした場合、
|
|
データが破損または喪失される見込みは増大します (増大するだけです)。
|
|
.I cachesize
|
|
が 0 (サイズが指定されていない) の場合、
|
|
デフォルトのキャッシュが使用されます。
|
|
.TP
|
|
maxkeypage
|
|
1 ページに格納されるキーの最大数。現時点では実現されていません。
|
|
.TP
|
|
minkeypage
|
|
1 ページに格納されるキーの最少数。
|
|
この値を使用して、
|
|
オーバフローページにどのキーが格納されるかを判定します。
|
|
すなわち、キーまたはデータ構造が、minkeypage 値で除算された
|
|
pagesize より長い場合は、ページ自体にではなく、
|
|
オーバフローページに格納されます。
|
|
.I minkeypage
|
|
が 0 (キーの最少数が指定されていない) の場合、
|
|
値 2 が使用されます。
|
|
.TP
|
|
psize
|
|
ページサイズは、ツリー内のノードに使用されるページのサイズ
|
|
(バイト単位)です。最少ページサイズは 512 バイトであり、
|
|
最大ページサイズは 64K です。
|
|
.I psize
|
|
が 0 (ページサイズが指定されていない) の場合、
|
|
ページサイズは、基層となっている
|
|
ファイルシステム入出力ブロックサイズを基礎にして選択されます。
|
|
.TP
|
|
compare
|
|
compare はキー比較関数です。
|
|
最初のキー引数が 2 番めのキー引数より小さいと考えられるときは、
|
|
0 より小さい整数を返す必要があります。
|
|
2 番めのキー引数と同じと考えられるときは、
|
|
0 を返す必要があります。
|
|
2 番めのキー引数より大きいと考えられるときは、
|
|
0 より大きい整数を返す必要があります。
|
|
指定のツリーについては、ツリーが開かれるたびに、
|
|
同じ比較関数を使用する必要があります。
|
|
.I compare
|
|
がヌルの場合 (比較関数が指定されない場合)、
|
|
キーは辞書的に比較され、
|
|
短いキーは長いキーより小さいと見なされます。
|
|
.TP
|
|
prefix
|
|
prefix は接頭語比較関数です。
|
|
指定すると、このルーチンは、2 番めのキーとなる引数のバイト数を返します。
|
|
これは、2 番めの引数が1 番めの引数より大きいことを判定するために必要です。
|
|
キーが等しい場合は、キーの長さが返されるはずです。
|
|
このルーチンの便利さはきわめてデータに依存します。
|
|
しかし、データセットによっては、
|
|
ツリーのサイズと検索時間が大幅に削減できることもあることに注意してください。
|
|
.I prefix
|
|
がヌル (接頭語関数が指定されていない) であって、
|
|
.B しかも
|
|
比較関数が指定されない場合は、
|
|
デフォルトの辞書的な比較ルーチンが使用されます。
|
|
.I prefix
|
|
がヌルであり、しかも比較ルーチンが指定されている場合、
|
|
比較は行われません。
|
|
.TP
|
|
lorder
|
|
格納されたデータベースメタデータ内の整数のバイト順序。
|
|
数字は整数としての順序を表すはずです。
|
|
たとえば、ビッグエンディアン順では数字 4,321 になります。
|
|
.I lorder
|
|
が 0 の (順序が指定されていない) 場合、
|
|
現在のホスト順序が使用されます。
|
|
.PP
|
|
ファイルが既に存在している場合
|
|
(しかも O_TRUNC フラグが指定されていない場合)、
|
|
パラメータフラグ lorder と psize について指定された値は、
|
|
ツリーが作成されたときに使用された値のために無視されます。
|
|
.PP
|
|
ツリーの前方シーケンシャル走査は、
|
|
最も小さいキーから最も大きいキーに向かいます。
|
|
.PP
|
|
ツリーからキー / データのペアを削除することによって解放された空間は、
|
|
再び要求されることはありませんが、
|
|
再使用のために利用できるようにされるのが普通です。
|
|
すなわち、btree 記憶域は成長のみです。
|
|
唯一の解決策は、過度な削除を避けること、
|
|
または既存のツリーの走査から定期的に新しいツリーを作成することです。
|
|
.PP
|
|
btree 内の検索、挿入、および削除はすべて、
|
|
基底が平均のフィル要因である基底 N の O の対数で完了します。
|
|
順序付けられたデータを btree に挿入すると、
|
|
フィル要因が低くなることがよくあります。
|
|
この実装では、順序付けられた挿入が最良のケースとなり、
|
|
通常のページフィル要因よりはるかに良い結果になるように修正してあります。
|
|
.SH 誤り
|
|
.I btree
|
|
アクセス方式ルーチンは、ライブラリルーチン
|
|
.IR dbopen(3)
|
|
について指定したエラーの場合、処理失敗し、
|
|
.I errno
|
|
を設定する可能性があります。
|
|
.SH 関連項目
|
|
.IR dbopen (3),
|
|
.IR hash (3),
|
|
.IR mpool (3),
|
|
.IR recno (3)
|
|
.sp
|
|
.IR "The Ubiquitous B-tree" ,
|
|
Douglas Comer, ACM Comput. Surv. 11, 2 (June 1979), 121-138.
|
|
.sp
|
|
.IR "Prefix B-trees" ,
|
|
Bayer and Unterauer, ACM Transactions on Database Systems, Vol. 2, 1
|
|
(March 1977),11-26.
|
|
.sp
|
|
.IR "The Art of Computer Programming Vol. 3: Sorting and Searching" ,
|
|
D.E. Knuth, 1968, pp 471-480.
|
|
.SH バグ
|
|
ビッグエンディアンおよびリトルエンディアンのバイト順序だけがサポート
|
|
されています。
|