noble (3) btree.3.gz

Provided by: manpages-pl-dev_4.21.0-2_all bug

NAZWA

       btree - metoda dostępu do bazy btree

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

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

OPIS

       Note  well: This page documents interfaces provided up until glibc 2.1.  Since glibc 2.2, glibc no longer
       provides these interfaces.  Probably, you are looking for the APIs provided by the libdb library instead.

       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.

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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.