Provided by: manpages-ro-dev_4.27.0-1_all 

NUME
btree - metoda de acces la baza de date btree
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <sys/types.h> #include <db.h>
DESCRIERE
Notează bine: Această pagină documentează interfețele furnizate până la glibc 2.1. Începând cu glibc 2.2,
glibc nu mai furnizează aceste interfețe. Probabil că, în schimb, căutați API-urile furnizate de
biblioteca libdbb.
Rutina dbopen(3) este interfața bibliotecii cu fișierele de baze de date. Unul dintre formatele de
fișiere acceptate este cel al fișierelor btree. Descrierea generală a metodelor de acces la baza de date
se găsește în dbopen(3), iar această pagină de manual descrie doar informațiile specifice btree.
Structura de date btree este o structură arborescentă sortată, echilibrată, care stochează perechi
cheie/date asociate.
Structura de date specifică metodei de acces btree furnizată lui dbopen(3) este definită în fișierul de
includere <db.h> după cum urmează:
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;
Elementele acestei structuri sunt următoarele:
flags Valoarea fanionului este specificată prin combinarea prin OR a oricăreia dintre următoarele
valori:
R_DUP Permite cheile duplicate în arbore, adică permite inserarea în cazul în care cheia care
urmează să fie inserată există deja în arbore. Comportamentul implicit, așa cum este
descris în dbopen(3), este de a suprascrie o cheie corespunzătoare atunci când se inserează
o nouă cheie sau de a eșua dacă se specifică fanionul R_NOOVERWRITE. Fanionul R_DUP este
anulat de fanionul R_NOOVERWRITE, iar în cazul în care este specificat fanionul
R_NOOVERWRITE, încercările de a introduce chei duplicate în arbore vor eșua.
În cazul în care baza de date conține chei duplicate, ordinea de recuperare a perechilor
cheie/date este nedefinită dacă se utilizează rutina get; cu toate acestea, apelurile de
rutină seq cu fanionul R_CURSOR activat vor returna întotdeauna „prima” logică din orice
grup de chei duplicate.
cachesize
O dimensiune maximă sugerată (în octeți) a memoriei cache. Această valoare este doar consultativă,
iar metoda de acces va aloca mai multă memorie în loc să eșueze. Deoarece fiecare căutare
examinează pagina rădăcină a arborelui, punerea în cache a celor mai recent utilizate pagini
îmbunătățește substanțial timpul de acces. În plus, scrierile fizice sunt întârziate cât mai mult
posibil, astfel încât o memorie cache moderată poate reduce semnificativ numărul de operații de
In/Ieș. Evident, utilizarea unei memorii cache crește (dar numai crește) probabilitatea de
corupție sau de pierdere a datelor în cazul în care sistemul se blochează în timp ce un arbore
este modificat. Dacă cachesize este 0 (nu este specificată nicio dimensiune), se utilizează o
memorie cache implicită.
maxkeypage
Numărul maxim de chei care vor fi stocate pe o singură pagină. Nu este implementat în prezent.
minkeypage
Numărul minim de chei care vor fi stocate pe o singură pagină. Această valoare este utilizată
pentru a determina ce chei vor fi stocate pe paginile de depășire, adică, dacă o cheie sau un
element de date este mai lung decât dimensiunea paginii împărțită la valoarea „minkeypage”, acesta
va fi stocat pe paginile de depășire în loc să fie stocat în pagina propriu-zisă. Dacă minkeypage
este 0 (nu este specificat un număr minim de chei), se utilizează o valoare de 2.
psize Dimensiunea paginii este dimensiunea (în octeți) a paginilor utilizate pentru nodurile din arbore.
Dimensiunea minimă a paginii este de 512 octeți, iar dimensiunea maximă a paginii este de 64Kio.
Dacă psize este 0 (nu se specifică dimensiunea paginii), dimensiunea paginii este aleasă pe baza
dimensiunii blocului de intrare/ieșire a sistemului de fișiere subiacent.
compare
compare este funcția cheie de comparare. Aceasta trebuie să returneze un număr întreg mai mic,
egal sau mai mare decât zero dacă primul argument cheie este considerat a fi mai mic, egal sau mai
mare decât al doilea argument cheie. Aceeași funcție de comparare trebuie să fie utilizată pentru
un anumit arbore de fiecare dată când acesta este deschis. În cazul în care compare este NULL (nu
este specificată nicio funcție de comparație), cheile sunt comparate lexical, cheile mai scurte
fiind considerate mai mici decât cele mai lungi.
prefix prefix este funcția de comparare a prefixelor. Dacă este specificată, această rutină trebuie să
returneze numărul de octeți ai celui de-al doilea argument cheie care sunt necesari pentru a
determina că acesta este mai mare decât primul argument cheie. În cazul în care cheile sunt egale,
trebuie returnată lungimea cheii. Rețineți că utilitatea acestei rutine depinde în mare măsură de
date, dar, în unele seturi de date, poate produce o reducere semnificativă a dimensiunii arborelui
și a timpului de căutare. Dacă prefix este NULL (nu este specificată nicio funcție de prefix), și
nu este specificată nicio funcție de comparație, se utilizează o rutină de comparație lexicală
implicită. Dacă prefix este NULL și este specificată o rutină de comparare, nu se face nicio
comparație de prefix.
lorder Ordinea octeților pentru numerele întregi din metadatele stocate în baza de date. Numărul ar
trebui să reprezinte ordinea ca număr întreg; de exemplu, ordinea big endian ar fi numărul 4,321.
Dacă lorder este 0 (nu se specifică nicio ordine), se utilizează ordinea curentă a gazdei.
În cazul în care fișierul există deja (și nu este specificat fanionul O_TRUNC), valorile specificate
pentru argumentele flags, lorder și psize sunt ignorate în favoarea valorilor utilizate la crearea
arborelui.
Scanările secvențiale înainte ale unui arbore se fac de la cheia cea mai mică la cea mai mare.
Spațiul eliberat prin ștergerea perechilor cheie/date din arbore nu este niciodată recuperat, deși în mod
normal este disponibil pentru reutilizare. Aceasta înseamnă că structura de stocare btree este de tip
„grow-only” (doar-creștere). Singurele soluții sunt evitarea ștergerilor excesive sau crearea periodică a
unui nou arbore din scanarea unuia existent.
Căutările, inserările și ștergerile într-un arbore btree se vor finaliza în O lg bază N, unde baza este
factorul mediu de umplere. Adesea, inserarea de date ordonate în btrees are ca rezultat un factor de
umplere scăzut. Această implementare a fost modificată pentru a face ca inserarea ordonată să fie cel mai
bun caz, ceea ce duce la un factor de umplere a paginii mult mai bun decât cel normal.
ERORI-IEȘIRE
Rutinele metodei de acces btree pot eșua și pot configura errno pentru oricare dintre erorile specificate
pentru rutina de bibliotecă dbopen(3).
ERORI
Se acceptă numai ordinea big și little endian a octeților.
CONSULTAȚI ȘI
dbopen(3), hash(3), mpool(3), recno(3)
The Ubiquitous B-tree, Douglas Comer, ACM Comput. Surv. 11, 2 (June 1979), 121-138.
Prefix B-trees, Bayer and Unterauer, ACM Transactions on Database Systems, Vol. 2, 1 (March 1977), 11-26.
The Art of Computer Programming Vol. 3: Sorting and Searching, D.E. Knuth, 1968, pp 471-480.
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
Pagini de manual de Linux 6.9.1 2 mai 2024 btree(3)