Provided by: manpages-pl-dev_4.27.0-1_all bug

NAZWA

       btree - metoda dostępu do bazy b-drzew (btree)

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <sys/types.h> #include <db.h>

OPIS

       Ważna  uwaga: Ta strona podręcznika ekranowego opisuje interfejsy dostarczane do glibc 2.1. Od glibc 2.2,
       gblic 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ść.

       Jeśli  plik już istnieje (i nie podano znacznika O_TRUNC), wartości podane dla parametrów flags, lorder i
       psize zostaną zignorowane na rzecz wartości używanych w czasie tworzenia drzewa.

       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).

USTERKI

       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.

TŁUMACZENIE

       Tłumaczenie  niniejszej  strony  podręcznika:  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.

Linux man-pages 6.9.1                            2 maja 2024 r.                                         btree(3)