hash(3) | Library Functions Manual | hash(3) |
NUME
hash - metoda de acces la baza de date a sumelor ce control (hash)
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 hash. 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 hash.
Structura de date de sume de control este o schemă de bază de date extensibilă și dinamică.
Structura de date specifică metodei de acces furnizată lui dbopen(3) este definită în fișierul de includere <db.h> după cum urmează:
typedef struct { unsigned int bsize; unsigned int ffactor; unsigned int nelem; unsigned int cachesize; uint32_t (*hash)(const void *, size_t); int lorder; } HASHINFO;
Elementele acestei structuri sunt următoarele:
- bsize
- definește dimensiunea „găleții” (bucket) tabelului sumelor de control și este, în mod implicit, de 256 de octeți. Poate fi preferabil să se mărească dimensiunea paginii pentru tabelele rezidente pe disc și pentru tabelele cu elemente de date mari.
- ffactor
- indică o densitate dorită în cadrul tabelului sumelor de control (hash). Este o aproximare a numărului de chei care pot fi acumulate într-o singură găleată (bucket), determinând momentul în care tabelul sumelor de control crește sau se micșorează. Valoarea implicită este 8.
- nelem
- este o estimare a dimensiunii finale a tabelului sumelor de control. Dacă nu este definită sau valoarea definită este prea mică, tabelele sumelor de control se vor extinde în mod elegant pe măsură ce sunt introduse chei, deși se poate observa o ușoară degradare a performanței. Valoarea implicită este 1.
- cachesize
- este dimensiunea maximă sugerată, în octeți, a spațiului de prestocare (cache). Această valoare este doar consultativă, iar metoda de acces va aloca mai multă memorie în loc să eșueze.
- hash
- este o funcție hash() definită de utilizator. Deoarece nicio funcție hash() nu funcționează la fel de bine pentru toate datele posibile, utilizatorul poate constata că funcția hash() încorporată nu funcționează bine pentru un anumit set de date. O funcție hash() definită de utilizator trebuie să primească două argumente (un indicator la un șir de octeți și o lungime) și să returneze o cantitate de 32 de biți care să fie utilizată ca valoare a sumei de control (hash).
- lorder
- este 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 este specificată nicio ordine), se utilizează ordinea curentă a gazdei. Dacă fișierul există deja, valoarea specificată este ignorată și se utilizează valoarea specificată la crearea arborelui.
În cazul în care fișierul există deja (și nu este specificat fanionul O_TRUNC), valorile specificate pentru bsize, ffactor, lorder și nelem sunt ignorate și se utilizează valorile specificate la crearea arborelui.
Dacă este specificată o funcție hash(), hash_open încearcă să determine dacă funcția hash specificată este aceeași cu cea cu care a fost creată baza de date și eșuează dacă nu este așa.
Sunt furnizate interfețe retro-compatibile cu rutinele descrise în dbm(3) și ndbm(3), însă aceste interfețe nu sunt compatibile cu formatele de fișiere anterioare.
ERORI-IEȘIRE
Rutinele metodei de acces hash 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
btree(3), dbopen(3), mpool(3), recno(3)
Dynamic Hash Tables, Per-Ake Larson, Communications of the ACM, aprilie 1988.
A New Hash Package for UNIX, Margo Seltzer, USENIX Proceedings, iarna anului 1991.
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.
2 mai 2024 | 4.4 Berkeley Distribution |