BTREE(3) FreeBSD ライブラリ関数マニュアル BTREE(3)
名称
btree − btree データベースアクセス方式 |
書式
#include <sys/types.h> |
解説
ルーチン dbopen() は、データベースファイルへのライブラリインタフェースで す。サポートされているファイル形式の 1 つは btree ファイルです。データ ベースアクセス方式の一般的な説明は dbopen(3) にあります。このマニュアル ページは、 btree に固有の情報についてだけ説明しています。 btree データ構造は、関連するキー / データのペアを格納する、ソート済みのバ ランスのとれたツリー構造です。 dbopen() に提供される btree アクセス方式に固有のデータ構造は、次のように 〈db.h〉 インクルードファイルに定義されています。 typedef struct { |
u_long flags; |
||
u_int cachesize; |
||
int maxkeypage; |
||
int minkeypage; |
||
u_int psize; |
||
int (*compare)(const DBT *key1, const DBT *key2); |
||
size_t (*prefix)(const DBT *key1, const DBT *key2); |
||
int lorder; |
} BTREEINFO; この構造体のエレメントは次のとおりです。 |
flags
flag の値は以降の値の or (論理和) を取ることによって定義されま す。 R_DUP データベースに重複したキーが含まれている場合、 get ルーチ ンを使用すると、キー / データのペアの取り出しの順序は未定 義になります。しかし、R_CURSOR フラグを設定して seq ルー チンを呼び出すと、重複したキーの論理的な ‘‘最初’’ が必ず 返されます。 cachesize maxkeypage minkeypage psize compare prefix lorder ファイルが既に存在している場合 (しかも O_TRUNC フラグが指定されていない場 合)、パラメータ flags, lorder, psize について指定された値は、ツリーが作成 されたときに使用された値のために無視されます。 ツリーの前方シーケンシャル走査は、最も小さいキーから最も大きいキーに向か います。 ツリーからキー / データのペアを削除することによって解放された空間は、再び 要求されることはありませんが、再使用のために利用できるようにされるのが普 通です。すなわち、 btree 記憶域は成長のみです。唯一の解決策は、過度な削除 を避けること、または既存のツリーの走査から定期的に新しいツリーを作成する ことです。 btree 内の検索、挿入、および削除はすべて、基底が平均のフィル要因である基 底 N の O の対数で完了します。順序付けられたデータを btree に挿入すると、 フィル要因が低くなることがよくあります。この実装では、順序付けられた挿入 が最良のケースとなり、通常のページフィル要因よりはるかに良い結果になるよ うに修正してあります。 エラー |
btree アクセス方式ルーチンは、ライブラリルーチン dbopen(3) について指定し たエラーの場合、処理失敗し、 errno を設定する可能性があります。 |
関連項目
Douglas Comer, " The Ubiquitous B-tree", ACM Comput. Surv. 11, 2, 121-138, June 1979. Bayer and Unterauer, " Prefix B-trees", ACM Transactions onDatabase Systems, 1, Vol. 2, 11-26, March 1977. D. E. Knuth, The Art of Computer Programming Vol. 3: Sorting andSearching, 471-480, 1968.
バグ
ビッグエンディアンおよびリトルエンディアンのバイト順序だけがサポートされ ています。 FreeBSD 10.0 August 18, 1994 FreeBSD 10.0 |