Provided by: manpages-pl-dev_0.6-2_all bug

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 64K. 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.

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  3.71  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą  wersję  oryginału  można
       znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika   man  są:  Andrzej
       Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda  <robert@debian.org>  i  Michał
       Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na
       stronie  http://sourceforge.net/projects/manpages-pl/.  Jest   zgodne   z   wersją    3.71
       oryginału.

                                            2012-04-23                                   BTREE(3)