Hashing em DBMS: técnicas de hash estáticas e dinâmicas

⚡ Resumo Inteligente

Em um SGBD (Sistema de Gerenciamento de Banco de Dados), o hashing é uma técnica que calcula a localização em disco de um registro diretamente a partir de sua chave, sem percorrer um índice. Uma função hash mapeia chaves de busca para buckets de dados, e o hashing estático ou dinâmico gerencia como esses buckets crescem.

  • Ideia central: Uma função hash transforma uma chave em um endereço de bucket, permitindo que um registro seja encontrado em uma única etapa, em vez de por meio de busca em índice.
  • 🪣 Balde de dados: O local de memória, ou unidade de armazenamento, onde os registros com o mesmo hash são colocados.
  • 📌 Hashing estático: O número de buckets é fixo, portanto, uma determinada chave sempre corresponde ao mesmo endereço.
  • 📈 Hashing dinâmico: Os buckets são adicionados e removidos sob demanda, conforme o volume de dados muda.
  • 💥 Colisão: Mapa de duas chavesping para o mesmo bucket, resolvido por sondagem, rehash ou encadeamento.
  • 🔍 Melhor para: Pesquisas por correspondência exata na chave de pesquisa, onde o hashing supera a indexação ordenada.
  • 📊 Troca: A indexação ordenada é mais eficaz para consultas de intervalo; o hashing é mais eficaz para inserções de constantes e pesquisas pontuais.

Hashing estático e dinâmico em SGBD

O que é hash no SGBD?

Em SGBDs (Sistemas de Gerenciamento de Banco de Dados), o hashing é uma técnica para buscar diretamente a localização dos dados desejados no disco sem usar uma estrutura de índice. O método de hashing é usado para indexar e recuperar itens em um banco de dados, pois é mais rápido buscar um item específico usando a chave hash mais curta em vez de seu valor original. Os dados são armazenados na forma de blocos de dados cujo endereço é gerado pela aplicação de uma função hash; o local de memória onde esses registros são armazenados é conhecido como endereço. bloco de dados ou balde de dados.

Por que precisamos de hash?

Aqui estão as situações em um SGBD onde você precisa aplicar o método de hashing:

  • Em uma estrutura de banco de dados enorme, é difícil pesquisar todos os valores de índice em todos os seus níveis e, em seguida, alcançar o bloco de dados de destino para obter os dados desejados.
  • O hashing é usado para indexar e recuperar itens em um banco de dados, pois é mais rápido pesquisar um item específico usando a chave hash mais curta do que o valor original.
  • O hashing é um método ideal para calcular a localização direta de um registro de dados no disco sem usar uma estrutura de índice.
  • É também uma técnica útil para implementar dicionários.

Terminologias importantes em hash

Aqui estão alguns termos importantes usados ​​em hashing:

  • Recipiente de dados: Os buckets de dados são locais de memória onde os registros são armazenados. Também são conhecidos como unidades de armazenamento.
  • Chave: a Chave do SGBD É um atributo ou conjunto de atributos que ajuda a identificar uma linha (tupla) em uma relação (tabela).
  • Função hash: um mapaping Função que mapeia todo o conjunto de chaves de pesquisa para o endereço onde os registros reais estão localizados.
  • Sondagem Linear: um intervalo fixo entre as sondagens. Nesse método, o próximo bloco de dados disponível é usado para inserir o novo registro, em vez de sobrescrever o registro anterior.
  • Sondagem quadrática: Ajuda a determinar o novo endereço do bucket adicionando a saída consecutiva de um polinômio quadrático ao valor inicial fornecido pelo cálculo original.
  • Índice hash: O endereço do bloco de dados. Uma função hash pode ser uma função matemática simples ou complexa.
  • Double Hash: Um método usado em tabelas hash para resolver colisões aplicando uma segunda função hash.
  • Transbordamento do balde: A condição de estouro do bucket é chamada de colisão. Este é um estágio fatal para qualquer função hash estática.

Tipos de técnicas de hash

Existem principalmente dois tipos de técnicas de hashing em SGBD:

  1. Hashing estático
  2. Hashing dinâmico

A principal diferença entre os dois reside no fato de o número de baldes ser fixo ou não, como explicam as duas seções seguintes.

Hashing estático

Na computação hash estática, o endereço do bucket de dados resultante permanecerá sempre o mesmo.

Portanto, se você gerar um endereço para, digamos, ID_Aluno = 10 usando a função de hash mod(3), o endereço do bucket resultante será sempre 1Portanto, você não verá nenhuma alteração no endereço do bucket.

Portanto, no método de hash estático, o número de buckets de dados na memória permanece sempre constante.

Funções hash estáticas

  • Inserindo um registro: Quando um novo registro precisa ser inserido na tabela, você gera um endereço para ele usando sua chave hash. Uma vez gerado o endereço, o registro é armazenado nesse local.
  • Procurando: Quando você precisa recuperar o registro, a mesma função hash é usada para recuperar o endereço do bucket onde os dados estão armazenados.
  • Excluir um registro: Ao usar a função hash, primeiro você busca o registro que deseja excluir e, em seguida, remove o registro desse endereço na memória.

O hash estático se divide ainda em:

  1. Hash aberto
  2. Hash fechado

Hashing aberto

No método de hashing aberto, em vez de sobrescrever o registro mais antigo, o próximo bloco de dados disponível é usado para inserir o novo registro. Esse método também é conhecido como sondagem linear.

Por exemplo, A2 é um novo registro que você deseja inserir. A função hash gera o endereço 222, mas ele já está ocupado por outro valor. É por isso que o sistema procura o próximo bucket de dados, 501, e atribui A2 a ele.

Como funciona o hashing aberto com sondagem linear
Como funciona o hash aberto

Hash fechado

No método de hash fechado, quando os buckets estão cheios, um novo bucket é alocado para o mesmo hash e o resultado é encadeado após o anterior.

Hashing dinâmico

O hashing dinâmico oferece um mecanismo no qual blocos de dados são adicionados e removidos dinamicamente e sob demanda. Nesse método de hashing, a função hash ajuda a criar um grande número de valores, e a estrutura cresce ou diminui conforme os dados são inseridos. Isso o torna ideal para tabelas cujo tamanho não pode ser previsto, onde o hashing estático desperdiçaria espaço ou causaria estouro de capacidade.

Diferença entre indexação ordenada e hashing

Abaixo estão as principais diferenças entre indexação e hashing:

Parâmetros Técnicos Indexação ordenada Hashing
Armazenamento de endereço Os endereços na memória são classificados de acordo com um valor de chave chamado chave primária. Os endereços são sempre gerados usando uma função hash no valor da chave.
Desempenho Pode diminuir à medida que os dados aumentam, porque os dados são armazenados ordenados e cada inserção, exclusão ou atualização os reordena. O desempenho é melhor com adição e exclusão constantes de dados. Para um banco de dados muito grande, a manutenção do arquivo hash torna-se mais dispendiosa.
use para Preferencial para recuperação de intervalo, onde os dados são recuperados para um intervalo específico. Ideal para recuperar um registro específico com base na chave de pesquisa, e funciona bem apenas quando a função hash é aplicada à chave de pesquisa.
Gerenciamento de memória Muitos blocos de dados não utilizados surgem de operações de exclusão e atualização e não podem ser liberados para reutilização, sendo necessária, portanto, manutenção regular. Tanto no hashing estático quanto no dinâmico, o gerenciamento de memória é constante e o estouro do bucket é tratado para ampliar a funcionalidade do hashing estático.

Resumindo, escolha a ordem. indexação para consultas de intervalo e hashing para pesquisas de correspondência exata na chave.

O que é colisão?

Uma colisão de hash é uma situação em que os hashes resultantes de dois ou mais itens no conjunto de dados são mapeados incorretamente para o mesmo local. tabela de hash.

Como lidar com uma colisão de hash

Existem duas técnicas que você pode usar para evitar uma colisão de hash:

  1. Repetindo: Este método invoca uma função hash secundária, que é aplicada continuamente até que um espaço vazio seja encontrado onde um registro possa ser inserido.
  2. Encadeamento: O método de encadeamento cria uma lista ligada de itens cujas chaves têm o mesmo valor de hash. Esse método requer um campo de ligação adicional em cada posição da tabela.

Perguntas Frequentes

O hash estático mantém um número fixo de buckets, podendo, portanto, sofrer estouro à medida que os dados aumentam. O hash dinâmico adiciona e remove buckets sob demanda, adaptando-se assim às mudanças no tamanho dos dados sem a necessidade de uma reconstrução completa.

Para consultas de intervalo. O hashing espalha as chaves por vários buckets, portanto, uma consulta "entre" ou "maior que" não consegue percorrer as chaves em ordem. Um índice ordenado mantém as chaves classificadas e é a melhor opção nesse caso.

Um bucket transborda quando o número de registros atribuídos a ele excede sua capacidade de armazenamento. Em hashing estático, isso é comum à medida que o volume de dados aumenta, e é tratado por meio de endereçamento aberto, encadeamento ou buckets de transbordamento.

Os sistemas de IA usam hashing para busca rápida de características e para o truque de hashing, que mapeia categorias de alta cardinalidade em um vetor fixo. O hashing de similaridade também agrupa registros quase duplicados de forma eficiente.

O rehashing encontra outro espaço livre na mesma tabela usando uma segunda função. O chaining mantém os registros em conflito em uma lista encadeada associada ao bucket, de modo que a própria tabela nunca preencha um espaço duas vezes.

Resuma esta postagem com: