NOM¶
btree - Méthodes d'accès à une base de données en arbre
binaire
SYNOPSIS¶
#include <sys/types.h>
#include <db.h>
DESCRIPTION¶
NOTE: cette page décrit des interfaces founies par la glibc jusque
dans sa version 2.1. Depuis la version 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 pour les
fichiers de base de données. L'un des formats de fichier supportés
est l'arbre binaire de fichiers. 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 présente page ne décrit que les
informations spécifiques aux arbres binaires.
Une telle structure de données est un arbre équilibré, trié,
mémorisant les paires « clés-données »
associées.
La structure de données spécifique aux méthodes d'accès aux
arbres binaires que l'on fournit à
dbopen(3) est définie dans
le fichier d'en-tête
<db.h> comme suit :
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;
Les éléments de cette structure sont les suivants :
- flags
- La valeur de ce champ est calculée avec un OU
binaire sur certaines des constantes suivantes :
- R_DUP
- Autoriser les clés dupliquées dans l'arbre,
c'est-à-dire, permettre l'insertion même si la clé existe
déjà dans l'arbre. Le comportement par défaut, comme
décrit dans dbopen(3), est d'écraser une clé
correspondante lors de l'insertion d'une nouvelle clé, ou
d'échouer si le drapeau R_NOOVERWRITE est indiqué. Le
drapeau R_NOOVERWRITE a priorité sur le drapeau R_DUP,
et si R_NOOVERWRITE est spécifié, une tentative
d'insertion d'une clé déjà existante échouera.
- Si la base de données contient des clés
dupliquées, l'ordre de récupération des paires
« clé-valeur » est indéfini si l'on utilise
la routine get. Toutefois la routine seq avec le drapeau
R_CURSOR positionné renvoie la clé
« logiquement première » de chaque groupe de
clés dupliquées.
- cachesize
- Une suggestion de taille maximale (en octets) du cache
mémoire. Cette valeur est seulement indicative, et les
méthodes d'accès alloueront plus de mémoire plutôt que
d'échouer. Comme chaque recherche examine la page racine de l'arbre,
le cache des pages les plus récemment consultées améliore
les temps d'accès. De plus, les écritures physiques sont
retardées aussi longtemps que possible, ainsi un cache, même
modeste, peut réduire sensiblement le nombre d'opérations
d'entrée-sortie. Bien sûr, l'utilisation d'un cache augmente (et
seulement augmente) la probabilité de corruption ou de perte de
données si le système plante alors qu'un arbre est en cours de
modification. Si cachesize vaut 0 (pas de taille indiquée) un
cache est utilisé par défaut.
- maxkeypage
- Le nombre maximal de clés qui seront stockées sur
une seule page. Pas encore implémenté.
- minkeypage
- Le nombre minimal de clés qui seront stockées sur
la même page. Cette valeur est utilisée pour déterminer
quelles clés seront stockées sur des pages de débordement.
Par exemple, lorsqu'une clé ou une donnée est plus grande que la
taille de page divisée par le nombre minimal de clés, elle est
stockée sur des pages de débordement plutôt que sur la page
elle-même. Si minkeypage est nulle (aucun nombre minimal de
clés indiqué), une valeur de 2 est utilisé.
- psize
- Taille (en octets) des pages utilisées pour les
nœuds de l'arbre. La taille minimale est de 512 octets, et la
taille maximale de 64 ko. Si psize vaut 0, (aucune taille
indiquée), la taille de la page est choisie en fonction de la taille
des blocs d'entrée-sortie du système de fichiers
sous-jacent.
- compare
- Fonction de comparaison de clé. Elle doit renvoyer un
entier inférieur, égal ou supérieur à zéro
lorsque le premier argument est respectivement inférieur, égal
ou supérieur au second. La même fonction de comparaison doit
toujours être utilisée pour un arbre donné pendant son
ouverture. Si compare vaut NULL (aucune fonction indiquée),
les clés sont comparées de manière lexicographique ;
les clés les plus courtes sont considérées comme
inférieures aux clés les plus longues.
- prefix
- Fonction de comparaison avec préfixe. Si elle est
spécifiée, cette routine doit renvoyer le nombre d'octets du
second argument (une clé) qui sont nécessaires pour
déterminer s'il est supérieur au premier argument (une
clé). Si les clés sont égales, la longueur de la clé
devrait être retournée. Remarquez que l'utilité de cette
routine dépend dans une très large mesure du type de
données manipulées, mais il arrive que cette routine fournisse
des réductions significatives de taille d'arbre et de temps de
recherche. Si prefix vaut NULL (aucune fonction indiquée),
et si aucune fonction de comparaison n'est mentionnée, une
routine de comparaison lexicographique est employée. Si prefix
est NULL et si une routine de comparaison est spécifiée, aucune
comparaison de préfixe n'est effectuée.
- lorder
- L'ordre des octets des 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 (gros boutiste) est
représenté par le nombre 4321. Si lorder vaut 0 (aucun
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 indiquées par les paramètres
flags,
lorder, et
psize sont ignorées, et
remplacées par les valeurs utilisées lors de la création de
l'arbre.
Le balayage séquentiel de l'arbre vers l'avant se déroule de la plus
petite clé vers la plus grande.
L'espace libéré par la destruction des paires
« clés-données » n'est jamais
récupéré, bien qu'il soit théoriquement disponible pour
être réutilisé. Cela signifie qu'une base de données en
arbre binaire ne fait que grandir. Il faut donc éviter les suppressions
exagérées, ou reconstruire régulièrement un nouvel arbre
depuis un balayage de l'ancien.
Les recherches, les insertions et les suppressions dans un arbre binaire
s'effectuent en O log base N, où base représente le facteur de
remplissage moyen. Souvent, l'insertion de données déjà
ordonnées dans un arbre binaire résulte en un facteur d'insertion
faible. Cette implémentation a été modifiée pour rendre
l'insertion d'éléments ordonnés encore plus profitable. Cela
donne un facteur de remplissage de pages encore meilleur.
ERREURS¶
Les routines d'accès
btree peuvent échouer et définir
errno avec le code de toutes les erreurs indiquées pour les
routines de la bibliothèque
dbopen(3).
BOGUES¶
Seuls les ordres d'octets gros boutiste (big-endian) et petit boutiste
(little-endian) fonctionnent.
VOIR AUSSI¶
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.
COLOPHON¶
Cette page fait partie de la publication 3.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».