Provided by: manpages-pl-dev_4.13-4_all 

NAZWA
btree - metoda dostępu do bazy btree
SKŁADNIA
#include <sys/types.h>
#include <db.h>
OPIS
Ważna uwaga: Ta strona podręcznika ekranowego opisuje interfejsy dostarczane przez bibliotekę glibc aż do
wersji 2.1. Od wersji 2.2 glibc już nie zawiera tych interfejsów. Najprawdopodobniej to, czego szukasz,
to API dostarczane przez bibliotekę libdb.
Funkcja dbopen() stanowi interfejs biblioteczny do plików baz danych. Jednym z obsługiwanych formatów są
pliki btree. Ogólny opis metod dostępu do baz danych znajduje się w dbopen(3), a ta strona podręcznika
opisuje jedynie informacje specyficzne dla btree.
Struktura danych btree stanowi uporządkowaną, zrównoważoną strukturę drzewiastą, przechowującą powiązane
pary klucz/dane.
Specyficzna dla metody dostępu btree struktura danych używana przez dbopen(3) jest zdefiniowana w pliku
nagłówkowym <db.h> następująco:
typedef struct {
unsigned long flags;
unsigned int cachesize;
int maxkeypage;
int minkeypage;
unsigned int psize;
int (*compare)(const DBT *key1, const DBT *key2);
size_t (*prefix)(const DBT *key1, const DBT *key2);
int lorder;
} BTREEINFO;
Struktura ta zawiera następujące elementy:
flags Wartość znacznika jest określona przez alternatywę bitową (OR) dowolnych z następujących wartości:
R_DUP Zezwala na powtarzające się w drzewie klucze, tzn. pozwala dodawać klucze, które już w
drzewie istnieją. Domyślnym zachowaniem, jak opisano w dbopen(3), jest nadpisywanie
istniejącego pasującego klucza podczas wprowadzania nowego klucza lub niepomyślne
zakończenie, gdy podany jest znacznik R_NOOVERWRITE. Znacznik R_DUP jest nadpisywany przez
znacznik R_NOOVERWRITE; gdy znacznik R_NOOVERWRITE jest podany, próba dodania do drzewa
klucza, który już istnieje, zakończy się niepowodzeniem.
Jeśli baza danych zawiera powtarzające się klucze, kolejność pobierania kluczy/danych za
pomocą funkcji get jest niezdefiniowana, jednakże, wywołania funkcji seq z ustawionym
znacznikiem R_CURSOR zawsze zwrócą logicznie "pierwszy" z dowolnej grupy powtarzających się
kluczy.
cachesize
Sugerowany maksymalny rozmiar (w bajtach) bufora w pamięci. Wartość ta stanowi jedynie zalecenie,
więc metoda dostępu raczej przydzieli więcej pamięci niż zawiedzie. Ze względu na to, że każde
poszukiwanie bada stronę korzenia drzewa, buforowanie najczęściej używanych stron istotnie skróci
czas dostępu. Dodatkowo, fizyczne zapisy będą opóźnione na tyle, na ile będzie to możliwe, więc
umiarkowany bufor może istotnie zmniejszyć liczbę operacji wejścia/wyjścia. Oczywiście,
korzystanie z bufora zwiększa (ale jedynie zwiększa) prawdopodobieństwo uszkodzenia lub utraty
danych, jeśli system ulegnie awarii podczas gdy drzewo jest modyfikowane. Jeśli cachesize wynosi 0
(nie podano rozmiaru) używany jest bufor domyślny.
maxkeypage
Maksymalna liczba kluczy, które będą przechowywane w ramach pojedynczej strony. Aktualnie nie
zaimplementowane.
minkeypage
Minimalna liczba kluczy przechowywanych w ramach pojedynczej strony. Wartość ta służy do
określania, które klucze będą przechowywane w stronach nadmiarowych, to jest jeśli klucz lub
element danych jest większy niż rozmiar strony podzielony przez wartość minkeypage, będzie on
przechowywany w stronie nadmiarowej, zamiast w stronie właściwej. Jeśli minkeypage wynosi 0 (nie
podano minimalnej liczby kluczy), użyta zostanie wartość 2.
psize Rozmiar strony jest rozmiarem (w bajtach) stron używanych przez węzły drzewa. Minimalny rozmiar
strony wynosi 512 bajtów, a maksymalnym rozmiarem jest 64KiB. Jeśli psize wynosi 0 (nie podano
rozmiaru strony), rozmiar strony jest wybierany w oparciu o rozmiar bloku używanego systemu
plików.
compare
Compare jest funkcją porównywania kluczy. Musi ona zwracać liczbę całkowitą mniejszą, równą lub
większą od zera, gdy klucz będący pierwszym argumentem jest, odpowiednio, mniejszy, równy, większy
niż klucz będący drugim argumentem. Dla danego drzewa przy każdym jego otwarciu musi być używana
ta sama funcja porównawcza. Jeśli compare ma wartość NULL (nie podano funkcji porównawczej),
klucze będą porównywane leksykalnie, przy czym krótsze klucze będą uważane za mniejsze niż klucze
dłuższe.
prefix Prefix jest funkcją porównywania przedrostków. Jeśli zostanie podana, musi ona zwracać liczbę
bajtów argumentu będącego drugim kluczem, które są niezbędne dla określenia czy jest on większy
niż klucz będący pierwszym argumentem. Gdy klucze będą równe, powinna zostać zwrócona długość
klucza. Uwaga, przydatność tej funkcji silnie zależy od danych, jednak dla pewnych zbiorów danych
jej używanie może prowadzić do istotnie zmniejszonych rozmiarów drzewa i krótszych czasów
poszukiwania. Jeśli prefix ma wartość NULL (nie podano funkcji prefix) oraz nie podano funkcji
porównawczej, użyta zostanie domyślna funkcja porównywania leksykalnego. Jeśli prefix ma wartość
NULL i podano funkcję porównawczą, nie będzie wykonywane porównywanie przedrostków.
lorder Kolejność bajtów dla liczb całkowitych w przechowywanych metadanych bazy. Liczba powinna
reprezentować kolejność jako liczbę całkowitą; na przykład, porządek grubokońcy byłby liczbą
4,321. Jeśli lorder wynosi 0 (nie podano kolejności) użyta zostanie aktualna, systemowa
kolejność.
If the file already exists (and the O_TRUNC flag is not specified), the values specified for the
arguments flags, lorder, and psize are ignored in favor of the values used when the tree was created.
Liniowe przeglądanie drzewa "do przodu" odbywa się od najmniejszego klucza do największego.
Przestrzeń zwolniona przez usunięcie par klucz/dane z drzewa nie jest nigdy odzyskiwana, jednakże, jest
ona normalnie dostępna dla ponownego użycia. Oznacza to, że struktura przechowująca drzewo btree może
jedynie rosnąć. Jedynym rozwiązaniem jest unikanie nadmiernego usuwania lub okresowe tworzenie świeżego
drzewa na podstawie przeglądania istniejcego drzewa.
Przeszukiwania, wstawiania i usunięcia w btree odbywają się w czasie O lg base N, gdzie base jest
czynnikiem średniego wypełnienia. Często, wprowadzanie do drzew btree danych uporządkowanych prowadzi do
niskiego czynnika wypełnienia. Ta implementacja została zmodyfikowana, aby uczynić uporządkowane
wprowadzanie najkorzystniejszym przypadkiem, uzyskując w wyniku tego dużo lepszy niż normalnie czynnik
wypełnienia stron.
BŁĘDY
Funkcje metod dostępu btree mogą zawieść i ustawić errno dla dowolnego z błędów podanych w podręczniku
funkcji bibliotecznej dbopen(3).
BŁĘDY
Obsługuje jedynie ostrokońcy i grubokońcy porządek bajtów.
ZOBACZ TAKŻE
dbopen(3), hash(3), mpool(3), recno(3)
The Ubiquitous B-tree, Douglas Comer, ACM Comput. Surv. 11, 2 (czerwiec 1979), 121-138.
Prefix B-trees, Bayer and Unterauer, ACM Transactions on Database Systems, t. 2, 1 (marzec 1977), 11-26.
The Art of Computer Programming Vol. 3: Sorting and Searching, D.E. Knuth, 1968, str. 471-480.
O STRONIE
Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis projektu, informacje
dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem
https://www.kernel.org/doc/man-pages/.
T◈UMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Andrzej Krzysztofowicz
<ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
21 grudnia 2020 r. BTREE(3)