plucky (3) btree.3.gz

Provided by: manpages-pl-dev_4.25.1-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

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