HASH(3)

NOME
hash - método de acesso a banco de dados 'hash'

SINÓPSE
#include <sys/types.h>
#include <db.h>

DESCRIÇÃO
A rotina dbopen é a interface da biblioteca para arquivos de banco de dados. Um dos formatos de arquivo suportados são arquivos 'hash'. A descrição geral dos métodos de acesso a banco de dados está em dbopen(3); esta página de manual descreve apenas as informações específicas ao 'hash'.

A estrutura de dados do 'hash' é um esquema extensível e dinâmico de 'hashing'.

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

typedef struct {
    u_int bsize;
    u_int ffactor;
    u_int nelem;
    u_int cachesize;
    u_int32_t (*hash)(const void *, size_t);
    int lorder;
} HASHINFO;

Os elementos dessa estrtutura são os seguintes:

bsize
    Bsize define o tamanho do 'bucket' da tabela 'hash' e é, por padrão, 256 bytes. Pode ser preferível aumentar o tamanho da página para tabelas residentes em disco e tabelas com itens de dados extensos.

ffactor
    Ffactor indica uma densidade desejada dentro da tabela 'hash'. Ele é uma aproximação do número de chaves permitidas a serem acumuladas em qualquer O valor padrão por omissão é 8.

nelem
    Nelem é uma estimativa do tamanho final da tabela 'hash'. Se não definido ou muito baixo, as tabelas 'hash' serão expandidas elegantemente assim que chaves forem adicionadas, embora uma leve degradação na performance possa ser notada. O valor padrão é 1.

cachesize
    Um tamanho máximo sugerido, em bytes, da memória 'cache'. Este valor é apenas uma sugestão e o método de acesso alocará mais memória em vez de falhar.

hash
    Hash é uma função de 'hash' definida pelo usuário. Como nenhuma função de 'hash' tem desempenho igualmente bom em todos os dados possíveis, o usuário pode achar que a função 'hash' embutida funciona mal em um conjunto particular de dados. Funções de 'hash' especificadas pelo usuário devem tomar dois argumentos (um ponteiro para uma string de bytes e um comprimento) e retornar uma quantidade de 32 bits para ser usada como valor do 'hash'.

lorder
    A ordem de byte para inteiros nos meta-dados do banco armazenado. O número deve representar a ordem como um inteiro; por exemplo, a ordem de maior no fim ("big endian") seria o número 4321. Se lorder for 0 (nenhuma ordem especificada) a ordem do 'host' atual é utilizada. Se o arquivo já existe, o valor especificado é ignorado e o valor especificado quando a árvore foi criada é utilizado.

Se o arquivo já existir (e o indicador O_TRUNC não for especificado), os valores especficados para os parâmetros bsize, ffactor, lorder e nelem são ignorados e os valores especificados quando a árvore foi criada são utilizados.

Se uma função de 'hash' for especificada, hash_open tentará determinar se a função de 'hash' especificada é a mesma que aquela com a qual o banco de dados foi criado, e falhará caso não seja.

Interfaces com compatibilidade retroativa para as rotinas descritas em dbm(3), e ndbm(3) são fornecidas; entretanto, essas interfaces não são compatíveis com formatos de arquivo anteriores.

ERROS
As rotinas de método de acesso hash podem falhar e definir errno para qualquer um dos erros especificados para a rotina de biblioteca dbopen(3).

VEJA TAMBÉM
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.

PROBLEMAS
Apenas é suportado ordens de byte 'big endian' e 'little endian'.

TRADUZIDO POR LDP-BR em 10/06/2001.

  Tradução:
Marcelo M. de Abreu <mmabreu@terra.com.br>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>