Provided by: manpages-pt-dev_20040726-4_all bug

NOME

       btree - método de acesso a banco de dados btree

SINOPSE

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

DESCRIÇÃO

       A  rotina  dbopen  é  a  interface  de biblioteca para arquivos de banco de dados.  Um dos
       formatos de arquivo suportados são os arquivos btree.  A descrição geral  dos  métodos  de
       acesso  a  banco  de  dados  está  em  dbopen(3),  esta  página de manual descreve somente
       informações específicas de btree.

       A estrutura de dados btree é uma estrutura de árvore ordenada e  balanceada  que  armazena
       pares associados chave/dados.

       A  estrutura  de  dados  específica  do  método de acesso btree, fornecida para dbopen , é
       definida no arquivo de inclusão <db.h>, como segue:

       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;

       Os elementos desta estrutura são como segue:

       flags  O valor do flag é especificado por qualquer um dos seguintes valores:

              R_DUP  Permite chaves duplicadas na árvore, isto é, permite inserção se a  chave  a
                     ser  inserida já existe na árvore.  O comportamento padrão, como descrito em
                     dbopen(3), é sobreescrever uma chave encontrada quando se  insere  uma  nova
                     chave,  ou  falhar  se  a flag R_NOOVERWRITE é especificada.  A flag R_DUP é
                     sobreposta  pela  flag  R_NOOVERWRITE,  e  se   a   flag   R_NOOVERWRITE   é
                     especificada, uma tentativa de inserir chaves duplicadas na árvore falhará.

                     Se  o  banco  de  dados contém chaves duplicadas, a ordem de recuperação dos
                     pares chave/dados é indefinido se a rotina get é usada, porém,  chamadas  de
                     rotinas  seq  com  a  flag  R_CURSOR  setada sempre retornará o ''primeiro''
                     lógico ou qualquer grupo de chaves duplicadas.

       cachesize
              Um tamanho máximo sugerido (em bytes) do cache de memória.  Este  valor  é  somente
              para  consulta,  e  o método de acesso alocará mais memória em vez de falhar.  Como
              cada busca examina a página raiz  da  árvore,  fazer  um  cache  das  páginas  mais
              recentemente  usadas  melhorará  substancialmente  o  tempo de acesso.  Além disso,
              escritas físicas são atrasadas  tanto  quanto  possível,  de  forma  que  um  cache
              moderado pode reduzir o número de operações de I/O significativamente.  Obviamente,
              o uso de cache aumenta (mas somente aumenta) a probabilidade de corrupçao ou  perda
              de  dados,  se  o  sistema  falhar  enquanto  a  árvore  está sendo modificada.  Se
              cachesize é 0 (nenhum tamanho é especificado), um cache padrão é usado.

       maxkeypage
              O número máximo  de  chaves  que  serão  armazenadas  em  uma  única  página.   Não
              implementado atualmente.

       minkeypage
              O  número mínimo de chaves que serão armazenadas em uma única página.  Este valor é
              usado para determinar quais chaves serão armazenadas em páginas de sobrecarga, isto
              é, se uma chave ou item de dado é maior que o tamanho da página dividido pelo valor
              de minkeypage, será armazenado em páginas de sobrecarga, em  vez  de  armazenar  na
              própria página.  Se minkeypage é 0 (nenhum número mínimo de chaves é especificado),
              é usado o valor 2.

       psize  árvore. O tamanho mínimo da página é de 512 bytes, e o máximo é de 64K.  Se psize é
              0  (nenhum  tamanho de página é especificado), um tamanho de página é escolhido com
              base no tamanho de bloco de I/O do sistema-base de arquivos.

       compare
              igual ou maior que zero se o primeiro  argumento  é  considerado,  respectivamente,
              menor,  igual  ou  maior  que  o  argumento  da  segunda  chave.  O mesma função de
              comparação deve ser usada em uma dada árvore toda  vez  que  ela  for  aberta.   Se
              compare  é  NULL  (nenhuma  função  de  comparação  é  especificada), as chaves são
              comparadas lexicamente, com chaves mais curtas consideradas menores do  que  chaves
              mais longas.

       prefix retornar um número de bytes do argumento da segunda chave, que é necessário para se
              determinar que é maior que o argumento da primeira chave.  Se as chaves são iguais,
              o  comprimento  da chave deve ser retornado. Note, a utilidade desta rotina é muito
              dependente dos dados, mas, em alguns conjuntos de dados pode produzir  tamanhos  de
              árvore  e  tempos de busca significativamente reduzidos.  Se prefix é NULL (nenhuma
              funcção de prefixo é especificada), e nenhuma função de comparação é  especificada,
              é  usada  uma rotina padrão de comparação léxica.  Se prefix é NULL e uma rotina de
              comparação é especificada, nenhuma comparação de prefixo é feita.

       lorder A ordem dos bytes para inteiros nos metadados do  banco  de  dados  armazenado.   O
              número  deve representar a ordem como um inteiro; por exemplo, a ordem "big endian"
              deveria ser o número 4,321.  Se lorder é 0 (nenhuma ordem é especificada), é  usada
              a ordem corrente do host.

       Se  o arquivo já existe (e a flag O_TRUNC não está especificada), os valores especificados
       para as flags de parâmetros, 'lorder' e 'psize' são  ignorados  em  favor  destes  valores
       usados quando a árvore foi criada.

       Buscas sequenciais para frente de uma árvore, da menor chave para a maior.

       O  espaço  liberado  pela  eliminação dos pares chave/dado da árvore nunca é reivindicado,
       apesar de ele normamente se tornar disponível para reuso.  Isto significa que a  estrutura
       de  armazenagem  'btree'  é  somente-crescente.  As únicas soluções são evitar eliminações
       excessivas, ou criar uma árvore fresca periodicamente a partir  da  busca  de  uma  árvore
       existente.

       Buscas,  inserções  e eliminações em uma 'btree' se completarão todas em O lg base N, onde
       'base' é o fator médio de preenchimento. Frequentemente a inserção de dados  ordenados  em
       'btrees'  resultam  em um fator de preenchimento baixo.  Esta implementação foi modificada
       para fazer a inserção ordenada no melhor caso, resultando em um fator de preenchimento  de
       página muito melhor que o normal.

ERROS

       As  rotinas  de  método  de  acesso a btree pode falhar e setar errno para qualquer um dos
       erros especificados para a rotina de biblioteca dbopen(3).

VEJA TAMBÉM

       dbopen(3), hash(3), mpool(3), recno(3)

       The Ubiquitous B-tree, Douglas Comer, ACM Comput. Surv. 11, 2 (June 1979), 121-138.

       B-trees de prefixo, Bayer and Unterauer, Transações ACM em Sistemas  de  Banco  de  Dados,
       Vol. 2, 1 (Março de 1977), 11-26.

       A  Arte  da  Programação  de  Computador  Vol.  3: Ordenação e Busca, D.E. Knuth, 1968, pp
       471-480.

BUGS

       Only big and little endian byte order is supported.

TRADUÇÃO PARA A LÍNGUA PORTUGUESA

       RUBENS  DE  JESUS  NOGUEIRA  <darkseid99@usa.net>  (tradução)  XXXXXX  XX  XXXXX  XXXXXXXX
       <xxxxxxxxxx@xxx.xxx> (revisão)

                                       18 de agosto de 1994                              BTREE(3)