Provided by: manpages-es_1.55-10_all bug

NONMBRE

       btree - método de acceso a bases de datos árbolB

SINOPSIS

       #include <sys/types.h>
       #include <db.h>

DESCRIPCIÓN

       La  rutina dbopen es la interfaz de biblioteca para los ficheros de bases de datos. Uno de
       los formatos de fichero soportado es el de los ficheros árbolB. La descripción general  de
       los  métodos  de  acceso  a  las  bases de datos se encuentra en dbopen(3), esta página de
       manual describe únicamente información especifíca de árbolB.

       La estructura de datos árbolB es  una  estructura  de  árbol  balanceado  y  ordenado  que
       almacena pares clave/datos asociados.

       La  estructura  de datos específica del método de acceso a árbolB proporcionada por dbopen
       se define en el fichero cabecera <db.h> como sigue:

       typedef struct {
              u_long flags;
              u_int cachesize;
              int maxkeypage;
              int minkeypage;
              u_int psize;
              int (*compare)(const DBT *key1, const DBT *key2);
              size_t (*prefix)(const DBT *key1, const DBT *key2);
              int lorder;
       } BTREEINFO;

       Los elementos de esta estructura son los siguientes:

       flags  El valor del campo de opciones se especifica mediante un O-lógico de cualquiera  de
              los siguientes valores:

              R_DUP  Permite  claves duplicadas en el árbol, es decir, permite la inserción si la
                     clave a ser insertada  ya  existen  en  el  árbol.   El  comportamiento  por
                     defecto,   como   se  describe  en  dbopen(3),  es  sobrescribir  una  clave
                     coincidente cuando se inserta una nueva clave o fallar si se  especifica  la
                     opción  R_NOOVERWRITE.   La  opción  R_NOOVERWRITE predomina sobre la opción
                     R_DUP y si se especifica la opción R_NOOVERWRITE, los intentos  de  insertar
                     claves duplicadas en el árbol fracasarán.

                     Si  la base de datos contiene claves duplicadas, el orden de recuperación de
                     los pares clave/datos es indefinido si se usa la rutina get sin embargo, las
                     llamadas  a la rutina seq con la opción R_CURSOR activa siempre devolverá el
                     primero ``lógico'' de cualquier grupo de claves duplicadas.

       cachesize
              Un tamaño máximo sugerido (en bytes) de la  memoria  caché.   Este  valor  es  sólo
              consultivo  y  el  método de acceso reservará más memoria antes que fallar.  Ya que
              toda búsqueda examina la página raíz del árbol, ocultar en caché  las  páginas  más
              recientemente  usadas  mejorará  sustancialmente  el tiempo de acceso.  Además, las
              escrituras físicas se demorarán tanto como  sea  posible,  por  lo  que  una  caché
              moderada  puede  reducir  el  número  de operaciones de E/S de forma significativa.
              Obviamente, usar una caché incrementa (pero sólo  incrementa)  la  probabilidad  de
              corrupción  o de pérdida de datos si el sistema cae mientras se está modificando un
              árbol.  Si cachesize es 0 (no se especifica un tamaño)  se  utiliza  un  tamaño  de
              caché por defecto.

       maxkeypage
              El  número máximo de claves que se almacenarán en una única página. No implementado
              actualmente.

       minkeypage
              El número mínimo de claves que se almacenarán en una única página.  Este  valor  se
              usa  para determinar qué claves se almacenarán en páginas de overflow, es decir, si
              una clave o elementos de datos es mayor que el tamaño de  página  dividido  por  el
              valor  de minkeypage, se almacenará en páginas de overflow en lugar de en la propia
              página.  Si minkeypage es 0 (no se especifica un número mínimo de claves) se usa un
              valor de 2.

       psize  Es  el  tamaño  (en bytes) de las páginas usadas por los nodos del árbol. El tamaño
              mínimo de página es 512 bytes y el tamaño máximo de página es 64K.  Si psize  es  0
              (no  se especifica un tamaño de página) se selecciona un tamaño de página basado en
              el tamaño de bloque de E/S del sistema de ficheros subyacente.

       compare
              Es la función de comparación de claves.  Debe devolver un  entero  menor,  igual  o
              mayor  que  cero  si  se  considera  que  el  argumento  de  la  primera  clave es,
              respectivamente, menor, igual o mayor que el argumento de  la  segunda  clave.   Se
              debe  usar la misma función de comparación para un árbol dado cada vez que se abre.
              Si compare es NULL (no se especifica un función  de  comparación),  las  claves  se
              comparan léxicamente, considerando las claves más cortas menores que las claves más
              largas.

       prefix Es la función de comparación de prefijos.   Si  se  especifica,  esta  rutina  debe
              devolver el número de bytes del argumento de la segunda clave que se necesitan para
              determinar que es mayor que el argumento de la primera clave.  Si  las  claves  son
              iguales,  se debería devolver la longitud de la clave.  Dese cuenta que la utilidad
              de esta rutina es muy dependiente de los datos pero, en algunos conjuntos de datos,
              puede  producir  unos  tamaños  de  árbol  y tiempos de búsqueda reducidos de forma
              significativa.  Si prefix es NULL (no se especifica una función de prefijo) y no se
              especifca  una función de comparación, se usa por defecto una rutina de comparación
              léxica.  Si prefix es NULL y se especifica una función de comparación, no  se  hace
              comparación de prefijos.

       lorder El  orden  de  bytes  para  los  enteros de los metadatos almacenados en la base de
              datos. El número debería representar el orden como un entero; por ejemplo, el orden
              `el  byte  de  mayor  peso  el último' (orden ascendente) sería el número 4321.  Si
              lorder es 0 (no se especifica un orden) se utiliza el orden del anfitrión actual.

       Si el fichero ya existe (y no se ha  especificado  la  opción  O_TRUNC),  se  ignoran  los
       valores  indicados  para  las  opciones de los parámetros, lorder y psize, en favor de los
       valores usados cuando se creó el árbol.

       Los recorridos secuenciales hacia adelante de un árbol van desde la clave más pequeña a la
       más grande.

       El  espacio  liberado  al borrar los pares clave/datos del árbol nunca se recupera, aunque
       normalmente se pone a disposición para su reutilización.  Esto significa que la estructura
       de  almacenamiento  árbolB  es  de  sólo  crecimiento.   Las  únicas soluciones son evitar
       excesivas eliminaciones o crear periódicamente  un  árbol  nuevo  recorriendo  el  que  ya
       existe.

       Todas  las  búsquedas, insercciones y eliminaciones de un árbolB se terminarán en un orden
       O(logaritmo en base N) donde `base' es el factor medio de  relleno.   Con  frecuencia,  la
       inserción  de  datos  ordenados  en  un  árbolB  produce  un factor de relleno bajo.  Esta
       implementación se ha modificado para  hacer  las  inserciones  ordenadas  el  caso  mejor,
       produciendo un factor de relleno de páginas mucho mejor de lo normal.

ERRORES

       Las  rutinas  del  método de acceso árbolB pueden fracasar y asignar a errno cualquiera de
       los errores especificados en la rutina de biblioteca dbopen(3).

VÉASE TAMBIÉN

       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.

FALLOS

       Sólo se soportan los órdenes de bytes ascendente (el byte  de  mayor  peso  el  último)  y
       descente (el bytes de menor peso el último).

                                          18 agosto 1994                                 BTREE(3)