NOM
hash - Méthodes d’accès aux bases de données avec tables de hachage.
SYNOPSIS
#include <sys/types.h>
#include <db.h>
La routine dbopen(3) est l’interface de bibliothèque des fichiers de
base de données. L’un des formats de fichier supportés 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 table 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.
Ceci 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à (et si le drapeau O_TRUNC n’est pas
spécifié), les valeurs spécifiées dans bsize, ffactor, lorder et nelem
sont ignorés 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 essayera 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 échouera 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.
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».