Hashing nei DBMS: tecniche di hashing statico e dinamico

โšก Riepilogo intelligente

Nei DBMS, l'hashing รจ una tecnica che calcola la posizione su disco di un record direttamente dalla sua chiave, senza attraversare un indice. Una funzione hash associa le chiavi di ricerca ai bucket di dati e l'hashing, statico o dinamico, gestisce la crescita di tali bucket.

  • โšก Idea centrale: Una funzione hash trasforma una chiave in un indirizzo di bucket, in modo che un record venga trovato in un solo passaggio anzichรฉ tramite la traversata dell'indice.
  • ๐Ÿชฃ Contenitore di dati: La posizione di memoria, o unitร  di archiviazione, in cui vengono inseriti i record con lo stesso hash.
  • ???? Hashing statico: Il numero di bucket รจ fisso, quindi una determinata chiave corrisponde sempre allo stesso indirizzo.
  • ๐Ÿ“ˆ Hashing dinamico: I bucket vengono aggiunti e rimossi su richiesta in base alle variazioni del volume dei dati.
  • ๐Ÿ’ฅ Collisione: Mappa a due chiaviping allo stesso secchio, risolto tramite sondaggio, rielaborazione o concatenamento.
  • ๐Ÿ” migliori Per: Ricerche con corrispondenza esatta sulla chiave di ricerca, dove l'hashing รจ superiore all'indicizzazione ordinata.
  • ๐Ÿ“Š Scambio: L'indicizzazione ordinata รจ piรน efficace per le query di intervallo; l'hashing รจ piรน efficace per gli inserimenti costanti e le ricerche puntuali.

Hashing statico e dinamico nei DBMS

Cos'รจ l'hashing nel DBMS?

Nei DBMS, l'hashing รจ una tecnica per cercare direttamente la posizione dei dati desiderati sul disco senza utilizzare una struttura di indice. Il metodo di hashing viene utilizzato per indicizzare e recuperare elementi in un database, poichรฉ รจ piรน veloce cercare un elemento specifico utilizzando la chiave hash piรน corta invece del suo valore originale. I dati vengono memorizzati sotto forma di blocchi di dati il โ€‹โ€‹cui indirizzo viene generato applicando una funzione hash; la posizione di memoria in cui vengono memorizzati questi record รจ nota come blocco dati o bucket di dati.

Perchรฉ abbiamo bisogno dell'hashing?

Ecco le situazioni in un DBMS in cui รจ necessario applicare il metodo di hashing:

  • Nel caso di una struttura di database di grandi dimensioni, รจ difficile cercare tutti i valori dell'indice attraverso tutti i loro livelli e quindi raggiungere il blocco di dati di destinazione per ottenere i dati desiderati.
  • L'hashing viene utilizzato per indicizzare e recuperare elementi in un database, perchรฉ รจ piรน veloce cercare un elemento specifico utilizzando la chiave hash piรน breve rispetto al valore originale.
  • L'hashing รจ un metodo ideale per calcolare la posizione diretta di un record di dati sul disco senza utilizzare una struttura di indice.
  • รˆ anche una tecnica utile per implementare i dizionari.

Terminologie importanti nell'hashing

Ecco alcuni termini importanti utilizzati nell'hashing:

  • Contenitore di dati: I bucket di dati sono posizioni di memoria in cui vengono archiviati i record. Sono anche noti come unitร  di archiviazione.
  • Chiave: a Chiave DBMS รจ un attributo o un insieme di attributi che ti aiuta a identificare una riga (tupla) in una relazione (tabella).
  • Funzione hash: una cartinaping funzione che associa l'intero set di chiavi di ricerca all'indirizzo in cui sono effettivamente memorizzati i record.
  • Sondaggio lineare: un intervallo fisso tra le sonde. In questo metodo, il blocco di dati successivo disponibile viene utilizzato per inserire il nuovo record, anzichรฉ sovrascrivere il record precedente.
  • Sondaggio quadratico: Aiuta a determinare il nuovo indirizzo del bucket aggiungendo l'output consecutivo di un polinomio quadratico al valore iniziale fornito dal calcolo originale.
  • Indice hash: l'indirizzo del blocco di dati. Una funzione hash puรฒ essere una semplice funzione matematica o una complessa.
  • Double Hashing: Un metodo utilizzato nelle tabelle hash per risolvere le collisioni applicando una seconda funzione hash.
  • Trabocco del secchio: La condizione di overflow del bucket รจ chiamata collisione. Questa รจ una fase fatale per qualsiasi funzione hash statica.

Tipi di tecniche di hashing

Nei DBMS esistono principalmente due tipi di tecniche di hashing:

  1. Hashing statico
  2. Hashing dinamico

La differenza principale tra i due risiede nel fatto che il numero di bucket รจ fisso o meno, come spiegato nelle due sezioni successive.

Hashing statico

Nell'hashing statico, l'indirizzo del bucket di dati risultante rimarrร  sempre lo stesso.

Pertanto, se generi un indirizzo per, ad esempio, ID_studente = 10 utilizzando la funzione di hashing mod(3), l'indirizzo del bucket risultante sarร  sempre 1Pertanto, non vedrai alcun cambiamento nell'indirizzo del bucket.

Pertanto, nel metodo di hashing statico, il numero di bucket di dati in memoria rimane sempre costante.

Funzioni hash statiche

  • Inserimento di un record: Quando รจ necessario inserire un nuovo record nella tabella, si genera un indirizzo per esso utilizzando la sua chiave hash. Una volta generato l'indirizzo, il record viene memorizzato in quella posizione.
  • Ricerca: Quando รจ necessario recuperare il record, la stessa funzione hash viene utilizzata per recuperare l'indirizzo del bucket in cui sono archiviati i dati.
  • Eliminare un record: Utilizzando la funzione hash, si recupera prima il record che si desidera eliminare, quindi si rimuove il record da quell'indirizzo di memoria.

L'hashing statico รจ ulteriormente suddiviso in:

  1. Hashing aperto
  2. Hashing chiuso

Apri Hashing

Nel metodo di hashing aperto, anzichรฉ sovrascrivere il record precedente, si utilizza il blocco di dati successivo disponibile per inserire il nuovo record. Questo metodo รจ anche noto come probing lineare.

Ad esempio, A2 รจ un nuovo record che si desidera inserire. La funzione hash genera l'indirizzo 222, ma questo รจ giร  occupato da un altro valore. Per questo motivo, il sistema cerca il successivo bucket di dati, il 501, e vi assegna A2.

Come funziona l'hashing aperto con la ricerca lineare
Come funziona Open Hash

Hashing chiuso

Nel metodo di hashing chiuso, quando i bucket sono pieni, viene assegnato un nuovo bucket per lo stesso hash e il risultato viene collegato al precedente.

Hashing dinamico

L'hashing dinamico offre un meccanismo in cui i bucket di dati vengono aggiunti e rimossi dinamicamente e su richiesta. In questo metodo di hashing, la funzione hash consente di creare un gran numero di valori e la struttura si espande o si riduce in base ai dati. Ciรฒ lo rende particolarmente adatto per tabelle le cui dimensioni non possono essere previste in anticipo, dove l'hashing statico causerebbe uno spreco di spazio o un overflow.

Differenza tra indicizzazione ordinata e hashing

Di seguito sono riportate le principali differenze tra indicizzazione e hashing:

Scheda Sintetica Indicizzazione ordinata hashing
Memorizzazione dell'indirizzo Gli indirizzi in memoria sono ordinati in base a un valore chiave chiamato chiave primaria. Gli indirizzi vengono sempre generati utilizzando una funzione hash sul valore della chiave.
Cookie di prestazione Puรฒ diminuire all'aumentare dei dati, perchรฉ i dati vengono memorizzati ordinati e ogni inserimento, cancellazione o aggiornamento li riordina. Le prestazioni sono ottimali con l'aggiunta e la cancellazione costante di dati. Per un database di grandi dimensioni, la manutenzione del file hash diventa piรน onerosa.
Utilizzare per Preferito per il recupero di intervalli, dove i dati vengono recuperati per un intervallo specifico. Ideale per recuperare un record specifico in base alla chiave di ricerca, e funziona bene solo quando la funzione hash รจ associata alla chiave di ricerca.
Gestione della memoria Molti blocchi di dati inutilizzati derivano da operazioni di eliminazione e aggiornamento e non possono essere rilasciati per il riutilizzo, pertanto รจ necessaria una manutenzione regolare. Nell'hashing statico e dinamico, la memoria viene sempre gestita e l'overflow del bucket viene gestito per estendere l'hashing statico.

In breve, scegli ordinato indicizzazione per query di intervallo e hashing per ricerche di corrispondenza esatta sulla chiave.

Cos'รจ la collisione?

Una collisione di hash รจ uno stato in cui gli hash risultanti da due o piรน elementi nel set di dati vengono mappati erroneamente nello stesso punto nel tabella hash.

Come gestire una collisione di hashing

Esistono due tecniche che puoi utilizzare per evitare una collisione di hash:

  1. Rielaborare: Questo metodo invoca una funzione hash secondaria, che viene applicata continuamente finchรฉ non viene trovato uno spazio vuoto in cui inserire un record.
  2. Concatenamento: Il metodo di concatenamento crea una lista concatenata di elementi le cui chiavi hanno lo stesso valore hash. Questo metodo richiede un campo di collegamento aggiuntivo in ogni posizione della tabella.

DOMANDE FREQUENTI

L'hashing statico mantiene un numero fisso di bucket, quindi puรฒ andare in overflow all'aumentare dei dati. L'hashing dinamico aggiunge e rimuove bucket su richiesta, adattandosi cosรฌ alle variazioni delle dimensioni dei dati senza necessitร  di una ricostruzione completa.

Per le query di intervallo. L'hashing disperde le chiavi tra i bucket, quindi una query "tra" o "maggiore di" non puรฒ percorrerle in ordine. Un indice ordinato mantiene le chiavi ordinate ed รจ la soluzione migliore in questo caso.

Un bucket si riempie eccessivamente quando il numero di record che vi vengono assegnati tramite hashing supera la sua capacitร . Nell'hashing statico, questo รจ un problema comune con l'aumentare della quantitร  di dati e viene gestito tramite indirizzamento aperto, concatenamento o bucket di overflow.

I sistemi di intelligenza artificiale utilizzano l'hashing per la ricerca rapida delle caratteristiche e per il trucco dell'hashing, che mappa le categorie ad alta cardinalitร  in un vettore fisso. L'hashing di similaritร  raggruppa inoltre in modo efficiente i record quasi identici.

Il rehashing trova un altro slot libero nella stessa tabella utilizzando una seconda funzione. Il chaining mantiene i record in conflitto in una lista concatenata collegata al bucket, in modo che la tabella stessa non riempia mai due volte uno slot.

Riassumi questo post con: