Hashing în DBMS: tehnici de hashing statice și dinamice

⚡ Rezumat inteligent

Hashing-ul în DBMS este o tehnică ce calculează locația pe disc a unei înregistrări direct din cheia sa, fără a parcurge un index. O funcție hash mapează cheile de căutare la compartimentele de date, iar hashing-ul static sau dinamic gestionează modul în care aceste compartimente cresc.

  • Ideea de bază: O funcție hash transformă o cheie într-o adresă de bucket, astfel încât o înregistrare este găsită într-un singur pas, mai degrabă decât prin traversarea indexului.
  • 🪣 Grupaj de date: Locația de memorie sau unitatea de stocare unde sunt plasate înregistrările cu același hash.
  • 📌 Hashing static: Numărul de bucket-uri este fix, deci o anumită cheie se mapează întotdeauna la aceeași adresă.
  • 📈 Hashing dinamic: Grupările sunt adăugate și eliminate la cerere, pe măsură ce volumul de date se modifică.
  • 💥 Coliziune: Hartă cu două cheiping în aceeași categorie, rezolvată prin sondare, rehashing sau lanț.
  • 🔍 Cel mai bun pentru: Căutări exacte pentru cheia de căutare, unde hashing-ul este mai eficient decât indexarea ordonată.
  • 📊 Compensație: Câștiguri de indexare ordonată pentru interogările de interval; câștiguri de hashing pentru inserări constante și căutări punctuale.

Hashing static și dinamic în DBMS

Ce este hashing în DBMS?

În SGBD, hashing-ul este o tehnică de căutare directă a locației datelor dorite pe disc, fără a utiliza o structură de index. Metoda de hashing este utilizată pentru a indexa și a recupera elemente dintr-o bază de date, deoarece este mai rapid să căutați un anumit element folosind cheia hash mai scurtă în loc de valoarea sa originală. Datele sunt stocate sub formă de blocuri de date a căror adresă este generată prin aplicarea unei funcții hash; locația de memorie unde sunt stocate aceste înregistrări este cunoscută sub numele de bloc de date sau compartiment de date.

De ce avem nevoie de hashing?

Iată situațiile dintr-un SGBD în care trebuie să aplicați metoda de hashing:

  • Pentru o structură de bază de date imensă, este dificil să cauți toate valorile indexului prin toate nivelurile lor și apoi să ajungi la blocul de date destinație pentru a obține datele dorite.
  • Hashing-ul este utilizat pentru indexarea și regăsirea elementelor dintr-o bază de date, deoarece este mai rapid să căutați un anumit element folosind cheia hash mai scurtă decât valoarea originală.
  • Hashing-ul este o metodă ideală pentru a calcula locația directă a unei înregistrări de date pe disc fără a utiliza o structură de index.
  • Este, de asemenea, o tehnică utilă pentru implementarea dicționarelor.

Terminologii importante în hashing

Iată terminologiile importante utilizate în hashing:

  • Grupaj de date: „Gălețile de date” sunt locații de memorie unde sunt stocate înregistrările. Sunt cunoscute și sub denumirea de unitate de stocare.
  • Cheie: a cheie DBMS este un atribut sau un set de atribute care vă ajută să identificați un rând (tuplu) într-o relație (tabel).
  • Funcția hash: o hartăping funcție care mapează tot setul de chei de căutare la adresa unde sunt plasate înregistrările efective.
  • Palpare liniară: un interval fix între sonde. În această metodă, următorul bloc de date disponibil este utilizat pentru a introduce noua înregistrare, în loc să suprascrie înregistrarea mai veche.
  • Palpare pătratică: ajută la determinarea noii adrese a bucket-ului prin adunarea rezultatului consecutiv al unui polinom pătratic la valoarea inițială dată de calculul inițial.
  • Indicele hash: adresa blocului de date. O funcție hash poate fi o funcție matematică simplă sau una complexă.
  • Double Hashing: o metodă utilizată în tabelele hash pentru a rezolva coliziunile prin aplicarea unei a doua funcții hash.
  • Depășire găleată: Condiția de depășire a bucketului se numește coliziune. Aceasta este o etapă fatală pentru orice funcție hash statică.

Tipuri de tehnici de hashing

Există în principal două tipuri de tehnici de hashing în DBMS:

  1. Hashing static
  2. Hashing dinamic

Cele două diferă în principal prin faptul că numărul de găleți este fix, așa cum se explică în următoarele două secțiuni.

Hashing static

În hashing-ul static, adresa rezultată a bucket-ului de date va rămâne întotdeauna aceeași.

Prin urmare, dacă generați o adresă pentru, să zicem, Student_ID = 10 folosind funcția de hashing mod (3), adresa compartimentului rezultată va fi întotdeauna 1Deci nu veți vedea nicio modificare a adresei bucket-ului.

Prin urmare, în metoda de hashing statică, numărul de compartimente de date din memorie rămâne întotdeauna constant.

Funcții hash statice

  • Inserarea unei înregistrări: Când o nouă înregistrare trebuie inserată în tabel, generați o adresă pentru aceasta folosind cheia hash. Odată ce adresa este generată, înregistrarea este stocată în locația respectivă.
  • In cautarea: Când trebuie să recuperați înregistrarea, aceeași funcție hash este utilizată pentru a recupera adresa bucket-ului în care sunt stocate datele.
  • Ștergeți o înregistrare: Folosind funcția hash, mai întâi preluați înregistrarea pe care doriți să o ștergeți, apoi eliminați înregistrarea de la acea adresă din memorie.

Hashing-ul static este împărțit în continuare în:

  1. Deschide hashing
  2. Hashing închis

Deschide Hashing

În metoda de hashing deschisă, în loc să se suprascrie înregistrarea mai veche, se folosește următorul bloc de date disponibil pentru a introduce noua înregistrare. Această metodă este cunoscută și sub denumirea de sondare liniară.

De exemplu, A2 este o înregistrare nouă pe care doriți să o inserați. Funcția hash generează adresa 222, dar aceasta este deja ocupată de o altă valoare. De aceea, sistemul caută următoarea categorie de date, 501, și îi atribuie A2.

Cum funcționează hashing-ul deschis cu sondare liniară
Cum funcționează Open Hash

Hashing închis

În metoda de hashing închis, când gălețile sunt pline, se alocă un nou găleat pentru același hash, iar rezultatul este legat după cel precedent.

Hashing dinamic

Hashing-ul dinamic oferă un mecanism prin care compartimentele de date sunt adăugate și eliminate dinamic și la cerere. În această metodă de hashing, funcția de hashing vă ajută să creați un număr mare de valori, iar structura crește sau se micșorează odată cu datele. Acest lucru o face o alegere excelentă pentru tabelele a căror dimensiune nu poate fi prezisă în avans, unde hashing-ul static ar fie irosi spațiu, fie ar depăși limitele.

Diferența dintre indexarea ordonată și hashing

Mai jos sunt principalele diferențe dintre indexare și hashing:

parametrii Indexare ordonată hashing
Stocarea adresei Adresele din memorie sunt sortate în funcție de o valoare a cheii numită cheie primară. Adresele sunt întotdeauna generate folosind o funcție hash pe valoarea cheii.
Performanţă Poate scădea pe măsură ce datele cresc, deoarece datele sunt stocate sortate și fiecare inserare, ștergere sau actualizare le reordonează. Performanța este cea mai bună prin adăugarea și ștergerea constantă de date. Pentru o bază de date imensă, întreținerea fișierelor hash devine mai costisitoare.
Utilizați pentru Preferat pentru regăsirea intervalelor, unde datele sunt regăsite pentru un anumit interval. Ideal pentru regăsirea unei anumite înregistrări pe baza cheii de căutare și funcționează bine doar atunci când funcția hash este pe cheia de căutare.
Managementul memoriei Multe blocuri de date neutilizate provin din operațiuni de ștergere și actualizare și nu pot fi eliberate pentru reutilizare, așa că este necesară o întreținere regulată. În hashing-ul static și dinamic, memoria este întotdeauna gestionată, iar depășirea bucket-ului este gestionată pentru a extinde hashing-ul static.

Pe scurt, alegeți ordonat indexare pentru interogări de interval și hashing pentru căutări exacte pe cheie.

Ce este coliziunea?

O coliziune hash este o stare în care hash-urile rezultate din două sau mai multe elemente din setul de date se mapează eronat în același loc în masa de hash.

Cum să gestionezi o coliziune de tip hashing

Există două tehnici pe care le puteți utiliza pentru a evita o coliziune hash:

  1. Repetare: Această metodă invocă o funcție hash secundară, care se aplică continuu până când se găsește un slot gol unde poate fi plasată o înregistrare.
  2. Înlănțuire: Metoda de înlănțuire construiește o listă înlănțuită de elemente ale căror chei au aceeași valoare prin hashing. Această metodă necesită un câmp de legătură suplimentar la fiecare poziție din tabel.

Întrebări frecvente

Hashing-ul static păstrează un număr fix de compartimente (bucket-uri), astfel încât poate depăși numărul pe măsură ce datele cresc. Hashing-ul dinamic adaugă și elimină compartimente la cerere, astfel încât se adaptează la schimbarea dimensiunii datelor fără o reconstrucție completă.

Pentru interogări de interval. Hashing-ul împrăștie cheile în mai multe compartimente, astfel încât o interogare de tip „inter” sau „mai mare decât” nu le poate parcurge în ordine. Un index ordonat menține cheile sortate și se potrivește mai bine acolo.

Un bucket se depășește atunci când sunt procesate prin hashing mai multe înregistrări decât poate conține. În hashing-ul static, acest lucru este frecvent pe măsură ce datele cresc și este gestionat prin adresare deschisă, lanț sau bucket-uri de depășire.

Sistemele de inteligență artificială utilizează hashing-ul pentru căutarea rapidă a caracteristicilor și pentru trucul de hashing, care mapează categoriile cu cardinalitate ridicată într-un vector fix. Hashing-ul de similaritate grupează, de asemenea, eficient înregistrările aproape duplicate.

Rehashing-ul găsește un alt slot liber în același tabel folosind o a doua funcție. Chaining-ul menține înregistrările care se colizează într-o listă legată atașată la bucket, astfel încât tabelul în sine nu umple niciodată un slot de două ori.

Rezumați această postare cu: