Man page - btree(3)

Packages contains this manual

Available languages:

en fr es pl ja ru ro

Manual

btree

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
ERREURS
BOGUES
VOIR AUSSI
TRADUCTION

NOM

btree - MĂ©thodes d’accĂšs Ă  une base de donnĂ©es en arbre binaire

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 pour les fichiers de base de donnĂ©es. L’un des formats de fichier pris en charge 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Ă©e.

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 kio. 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 renvoyĂ©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.

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 à debian-l10n-french@lists.debian.org .