hash
Table des matières
Retour à l'index
NOM
hash - Méthodes d'accès aux bases de données avec tables de hachage
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <sys/types.h> #include <db.h>
DESCRIPTION
NOTE : cette page décrit des interfaces fournies jusqu'à la
glibc 2.1. Depuis la glibc 2.2, la glibc ne fournit plus ces
interfaces. Veuillez consulter les API fournies par la bibliothèque
libdb.
La routine dbopen(3) est l'interface de bibliothèque des fichiers de base
de données. L'un des formats de fichier pris en charge est la table de
hachage. La description générale des méthodes d'accès à une base de données
est fournie dans la page de manuel dbopen(3). La page présente ne décrit
que les informations spécifiques aux tables de hachage.
Les structures de hachage représentent un schéma de base de données
dynamique et extensible.
La structure de données spécifique aux tables de hachage que l'on transmet à
dbopen(3) est définie dans <db.h> ainsi :
typedef struct {
unsigned int bsize;
unsigned int ffactor;
unsigned int nelem;
unsigned int cachesize;
uint32_t (*hash)(const void *, size_t);
int lorder;
} HASHINFO;
Les éléments de cette structure sont les suivants :
- bsize
-
défini la taille des cases de la table (bucket size), et vaut, par défaut,
256 octets. Il est préférable d'augmenter la taille de page pour les tables
situées sur disque ayant des éléments avec beaucoup de données.
- ffactor
-
indique une densité désirée au sein de la table. Il s'agit d'une
approximation du nombre de clés pouvant s'accumuler dans une seule case, ce
qui détermine le moment où la table doit s'agrandir ou se rétrécir. La
valeur par défaut est 8.
- nelem
-
est une estimation de la taille finale de la table de hachage. S'il n'est
pas configuré, ou s'il est configuré trop bas, la table s'agrandira quand
même correctement au fur et à mesure de l'entrée des clés, bien qu'une
légère dégradation des performances puisse être observée. La valeur par
défaut est 1.
- cachesize
-
est la taille maximale suggérée de mémoire cache, en octets. Cela n'a qu'une
valeur indicative, et les méthodes d'accès alloueront plus de mémoire
plutôt que d'échouer.
- hash
-
est une fonction définie par l'utilisateur. Comme aucune fonction de hachage
ne se comporte parfaitement bien sur tout type de données, il peut arriver
que la fonction interne soit particulièrement mauvaise sur un jeu
particulier de données. La fonction de hachage fournie par l'utilisateur
doit prendre deux arguments (un pointeur sur une chaîne d'octets et une
longueur) et renvoyer une valeur sur 32 bits utilisable comme valeur de
hachage.
- lorder
-
est l'ordre des octets pour les entiers stockés dans la base de données. Ce
nombre doit représenter l'ordre sous forme d'entier. Par exemple l'ordre
poids faible-poids fort (big endian) est représenté par le nombre 4321. Si
lorder vaut 0 (pas d'ordre indiqué), on utilise l'ordre des octets du
système hôte. Si le fichier existe déjà, la valeur spécifiée est ignorée et
la valeur spécifiée lors de la création de l'arbre est utilisée.
Si le fichier existe déjà (et si le drapeau O_TRUNC n'est pas spécifié),
les valeurs spécifiées dans bsize, ffactor, lorder et nelem sont
ignorées et les valeurs spécifiées lors de la création de l'arbre sont
utilisées à la place.
Si une fonction de hachage est indiquée, hash_open essaie de déterminer
s'il s'agit de la même fonction que celle indiquée lors de la création de la
base de données, et échoue si ce n'est pas le cas.
Des interfaces pour les routines décrites dans dbm(3), et ndbm(3) sont
fournies pour la compatibilité ascendante, toutefois ces interfaces ne sont
pas compatibles avec les anciens formats de fichier.
ERREURS
Les routines d'accès aux tables de hachage peuvent échouer et remplir
errno avec n'importe quelle erreur indiquée par la routine dbopen(3).
BOGUES
Seuls les ordres d'octets gros boutiste (big-endian) et petit boutiste
(little-endian) fonctionnent.
VOIR AUSSI
btree(3), dbopen(3), mpool(3), recno(3)
Dynamic Hash Tables, Per-Ake Larson, Communications of the ACM, April
1988.
A New Hash Package for UNIX, Margo Seltzer, USENIX Proceedings, Winter
1991.
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>
et
David Prévot <david@tilapin.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- ERREURS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:16 GMT, September 19, 2025