btree(3) Library Functions Manual btree(3) NUME btree - metoda de acces la baza de date btree BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include #include DESCRIERE Noteaza bine: Aceasta pagina documenteaza interfeele furnizate pana la glibc 2.1. Incepand cu glibc 2.2, glibc nu mai furnizeaza aceste interfee. Probabil ca, in schimb, cautai API-urile furnizate de biblioteca libdbb. Rutina dbopen(3) este interfaa bibliotecii cu fiierele de baze de date. Unul dintre formatele de fiiere acceptate este cel al fiierelor btree. Descrierea generala a metodelor de acces la baza de date se gasete in dbopen(3), iar aceasta pagina de manual descrie doar informaiile specifice btree. Structura de date btree este o structura arborescenta sortata, echilibrata, care stocheaza perechi cheie/date asociate. Structura de date specifica metodei de acces btree furnizata lui dbopen(3) este definita in fiierul de includere dupa cum urmeaza: 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 urmatoarele: fanioane Valoarea fanionului este specificata prin combinarea prin OR a oricareia dintre urmatoarele valori: R_DUP Permite cheile duplicate in arbore, adica permite inserarea in cazul in care cheia care urmeaza sa fie inserata exista deja in arbore. Comportamentul implicit, aa cum este descris in dbopen(3), este de a suprascrie o cheie corespunzatoare atunci cand se insereaza o noua cheie sau de a eua daca se specifica fanionul R_NOOVERWRITE. Fanionul R_DUP este anulat de fanionul R_NOOVERWRITE, iar in cazul in care este specificat fanionul R_NOOVERWRITE, incercarile de a introduce chei duplicate in arbore vor eua. In cazul in care baza de date conine chei duplicate, ordinea de recuperare a perechilor cheie/date este nedefinita daca se utilizeaza rutina get; cu toate acestea, apelurile de rutina seq cu fanionul R_CURSOR activat vor returna intotdeauna ,,prima" logica din orice grup de chei duplicate. cachesize O dimensiune maxima sugerata (in octei) a memoriei cache. Aceasta valoare este doar consultativa, iar metoda de acces va aloca mai multa memorie in loc sa eueze. Deoarece fiecare cautare examineaza pagina radacina a arborelui, punerea in cache a celor mai recent utilizate pagini imbunataete substanial timpul de acces. In plus, scrierile fizice sunt intarziate cat mai mult posibil, astfel incat o memorie cache moderata poate reduce semnificativ numarul de operaii de In/Ie. Evident, utilizarea unei memorii cache crete (dar numai crete) probabilitatea de corupie sau de pierdere a datelor in cazul in care sistemul se blocheaza in timp ce un arbore este modificat. Daca cachesize este 0 (nu este specificata nicio dimensiune), se utilizeaza o memorie cache implicita. maxkeypage Numarul maxim de chei care vor fi stocate pe o singura pagina. Nu este implementat in prezent. minkeypage Numarul minim de chei care vor fi stocate pe o singura pagina. Aceasta valoare este utilizata pentru a determina ce chei vor fi stocate pe paginile de depaire, adica, daca o cheie sau un element de date este mai lung decat dimensiunea paginii imparita la valoarea ,,minkeypage", acesta va fi stocat pe paginile de depaire in loc sa fie stocat in pagina propriu-zisa. Daca minkeypage este 0 (nu este specificat un numar minim de chei), se utilizeaza o valoare de 2. psize Dimensiunea paginii este dimensiunea (in octei) a paginilor utilizate pentru nodurile din arbore. Dimensiunea minima a paginii este de 512 octei, iar dimensiunea maxima a paginii este de 64Kio. Daca psize este 0 (nu se specifica dimensiunea paginii), dimensiunea paginii este aleasa pe baza dimensiunii blocului de intrare/ieire a sistemului de fiiere subiacent. compare compare este funcia cheie de comparare. Aceasta trebuie sa returneze un numar intreg mai mic, egal sau mai mare decat zero daca primul argument cheie este considerat a fi mai mic, egal sau mai mare decat al doilea argument cheie. Aceeai funcie de comparare trebuie sa fie utilizata pentru un anumit arbore de fiecare data cand acesta este deschis. In cazul in care compare este NULL (nu este specificata nicio funcie de comparaie), cheile sunt comparate lexical, cheile mai scurte fiind considerate mai mici decat cele mai lungi. prefix prefix este funcia de comparare a prefixelor. Daca este specificata, aceasta rutina trebuie sa returneze numarul de octei ai celui de-al doilea argument cheie care sunt necesari pentru a determina ca acesta este mai mare decat primul argument cheie. In cazul in care cheile sunt egale, trebuie returnata lungimea cheii. Reinei ca utilitatea acestei rutine depinde in mare masura de date, dar, in unele seturi de date, poate produce o reducere semnificativa a dimensiunii arborelui i a timpului de cautare. Daca prefix este NULL (nu este specificata nicio funcie de prefix), i nu este specificata nicio funcie de comparaie, se utilizeaza o rutina de comparaie lexicala implicita. Daca prefix este NULL i este specificata o rutina de comparare, nu se face nicio comparaie de prefix. lorder Ordinea octeilor pentru numerele intregi din metadatele stocate in baza de date. Numarul ar trebui sa reprezinte ordinea ca numar intreg; de exemplu, ordinea big endian ar fi numarul 4,321. Daca lorder este 0 (nu se specifica nicio ordine), se utilizeaza ordinea curenta a gazdei. In cazul in care fiierul exista deja (i nu este specificat fanionul O_TRUNC), valorile specificate pentru argumentele flags, lorder i psize sunt ignorate in favoarea valorilor utilizate la crearea arborelui. Scanarile secveniale inainte ale unui arbore se fac de la cheia cea mai mica la cea mai mare. Spaiul eliberat prin tergerea perechilor cheie/date din arbore nu este niciodata recuperat, dei in mod normal este disponibil pentru reutilizare. Aceasta inseamna ca structura de stocare btree este de tip ,,grow-only" (doar-cretere). Singurele soluii sunt evitarea tergerilor excesive sau crearea periodica a unui nou arbore din scanarea unuia existent. Cautarile, inserarile i tergerile intr-un arbore btree se vor finaliza in O lg baza N, unde baza este factorul mediu de umplere. Adesea, inserarea de date ordonate in btrees are ca rezultat un factor de umplere scazut. Aceasta implementare a fost modificata pentru a face ca inserarea ordonata sa fie cel mai bun caz, ceea ce duce la un factor de umplere a paginii mult mai bun decat cel normal. ERORI-IEIRE Rutinele metodei de acces btree pot eua i pot configura errno pentru oricare dintre erorile specificate pentru rutina de biblioteca dbopen(3). ERORI Se accepta numai ordinea big i little endian a octeilor. CONSULTAI 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 in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 btree(3)