Hashing i DBMS: Statiske og dynamiske hashing-teknikker

โšก Smart opsummering

Hashing i DBMS er en teknik, der beregner en posts diskplacering direkte fra dens nรธgle uden at bruge et indeks. En hashfunktion knytter sรธgenรธgler til data-buckets, og statisk eller dynamisk hashing styrer, hvordan disse buckets vokser.

  • โšก Kerneidรฉ: En hashfunktion omdanner en nรธgle til en bucket-adresse, sรฅ en post findes i รฉt trin i stedet for ved indeksgennemgang.
  • ๐Ÿชฃ Dataspand: Den hukommelsesplacering eller lagringsenhed, hvor poster med samme hash placeres.
  • ๐Ÿ“Œ Statisk hashing: Antallet af buckets er fast, sรฅ en given nรธgle knyttes altid til den samme adresse.
  • ๐Ÿ“ˆ Dynamisk hashing: Buckets tilfรธjes og fjernes efter behov, efterhรฅnden som datamรฆngden รฆndres.
  • ???? Kollision: To nรธglekortping til den samme bucket, lรธst ved probing, rehashing eller chaining.
  • ๐Ÿ” Bedst for: Prรฆcise match-opslag pรฅ sรธgenรธglen, hvor hashing er bedre end ordnet indeksering.
  • ๐Ÿ“Š Afvejning: Ordnede indekseringsgevinster for intervalforespรธrgsler; hashing-gevinster for konstante indsรฆttelser og punktopslag.

Statisk og dynamisk hashing i DBMS

Hvad er hashing i DBMS?

I DBMS er hashing en teknik til direkte at sรธge efter placeringen af โ€‹โ€‹รธnskede data pรฅ disken uden at bruge en indeksstruktur. Hashing-metoden bruges til at indeksere og hente elementer i en database, da det er hurtigere at sรธge efter et specifikt element ved hjรฆlp af den kortere hashnรธgle i stedet for dens oprindelige vรฆrdi. Data gemmes i form af datablokke, hvis adresse genereres ved at anvende en hashfunktion; hukommelsesplaceringen, hvor disse poster gemmes, kaldes en datablok eller databรธtte.

Hvorfor har vi brug for hashing?

Her er de situationer i et DBMS, hvor du skal anvende hashing-metoden:

  • For en enorm databasestruktur er det svรฆrt at sรธge i alle indeksvรฆrdier pรฅ alle deres niveauer og derefter nรฅ destinationsdatablokken for at fรฅ de รธnskede data.
  • Hashing bruges til at indeksere og hente elementer i en database, fordi det er hurtigere at sรธge efter et specifikt element ved hjรฆlp af den kortere hashnรธgle end den oprindelige vรฆrdi.
  • Hashing er en ideel metode til at beregne den direkte placering af en datapost pรฅ disken uden at bruge en indeksstruktur.
  • Det er ogsรฅ en nyttig teknik til at implementere ordbรธger.

Vigtige terminologier i hashing

Her er vigtige terminologier, der bruges i hashing:

  • Dataspand: Data buckets er hukommelsessteder, hvor posterne gemmes. Det er ogsรฅ kendt som lagringsenheden.
  • Nรธgle: a DBMS nรธgle er en attribut eller et sรฆt af attributter, der hjรฆlper dig med at identificere en rรฆkke (tuple) i en relation (tabel).
  • Hash-funktion: et kortping funktion, der knytter alle sรธgenรธgler til den adresse, hvor de faktiske poster er placeret.
  • Lineรฆr sondering: et fast interval mellem sonder. I denne metode bruges den nรฆste tilgรฆngelige datablok til at indtaste den nye post i stedet for at overskrive den รฆldre post.
  • Kvadratisk sondering: hjรฆlper med at bestemme den nye bucket-adresse ved at lรฆgge det fortlรธbende output fra et kvadratisk polynomium til startvรฆrdien givet af den oprindelige beregning.
  • Hash-indeks: adressen pรฅ datablokken. En hashfunktion kan vรฆre en simpel matematisk funktion eller en kompleks funktion.
  • Double Hashing: en metode, der bruges i hashtabeller til at lรธse kollisioner ved at anvende en anden hashfunktion.
  • Spandoverlรธb: Tilstanden med bucket-overflow kaldes kollision. Dette er en fatal fase for enhver statisk hashfunktion.

Typer af hashing-teknikker

Der er primรฆrt to typer hashingteknikker i DBMS:

  1. Statisk hash
  2. Dynamisk hash

De to adskiller sig primรฆrt i, om antallet af buckets er fast, som de nรฆste to afsnit forklarer.

Statisk hash

Ved statisk hashing vil den resulterende data bucket-adresse altid forblive den samme.

Derfor, hvis du genererer en adresse til f.eks. Student_ID = 10 ved hjรฆlp af hashingfunktionen mod(3), vil den resulterende bucket-adresse altid vรฆre 1Sรฅ du vil ikke se nogen รฆndring i bucket-adressen.

Derfor forbliver antallet af data-buckets i hukommelsen altid konstant i den statiske hashing-metode.

Statiske hash-funktioner

  • Indsรฆttelse af en post: Nรฅr en ny post skal indsรฆttes i tabellen, genererer du en adresse til den ved hjรฆlp af dens hash-nรธgle. Nรฅr adressen er genereret, gemmes posten pรฅ den placering.
  • Sรธger: Nรฅr du skal hente posten, bruges den samme hashfunktion til at hente adressen pรฅ den bucket, hvor dataene er gemt.
  • Slet en post: Ved at bruge hashfunktionen henter du fรธrst den post, du vil slette, og fjerner derefter posten fra den adresse i hukommelsen.

Statisk hashing er yderligere opdelt i:

  1. ร…bn hashing
  2. Lukket hashing

ร…bn Hashing

I den รฅbne hashing-metode bruges den nรฆste tilgรฆngelige datablok til at indtaste den nye post i stedet for at overskrive den รฆldre post. Denne metode er ogsรฅ kendt som lineรฆr probing.

For eksempel er A2 en ny post, du vil indsรฆtte. Hashfunktionen genererer adressen 222, men den er allerede optaget af en anden vรฆrdi. Derfor sรธger systemet efter den nรฆste data bucket, 501, og tildeler A2 til den.

Hvordan รฅben hashing fungerer med lineรฆr probing
Sรฅdan fungerer Open Hash

Lukket hashing

I den lukkede hashing-metode, nรฅr buckets er fulde, allokeres en ny bucket til den samme hash, og resultatet linkes efter den forrige.

Dynamisk hash

Dynamisk hashing tilbyder en mekanisme, hvor data buckets tilfรธjes og fjernes dynamisk og efter behov. I denne hashing-metode hjรฆlper hashfunktionen dig med at oprette et stort antal vรฆrdier, og strukturen vokser eller krymper med dataene. Dette gรธr den til et godt valg til tabeller, hvis stรธrrelse ikke kan forudsiges pรฅ forhรฅnd, hvor statisk hashing enten ville spilde plads eller overlรธbe.

Forskellen mellem ordnet indeksering og hashing

Nedenfor er de vigtigste forskelle mellem indeksering og hashing:

Driftsparametre Ordnet indeksering hashing
Opbevaring af adresse Adresser i hukommelsen sorteres efter en nรธglevรฆrdi kaldet primรฆrnรธglen. Adresser genereres altid ved hjรฆlp af en hash-funktion pรฅ nรธglevรฆrdien.
Ydeevne Den kan falde, efterhรฅnden som dataene รธges, fordi dataene lagres sorteret, og hver indsรฆttelse, sletning eller opdatering omorganiserer dem. Ydeevnen er bedst med konstant tilfรธjelse og sletning af data. For en enorm database bliver vedligeholdelse af hashfiler dyrere.
Brugt til Foretrukket til hentning af omrรฅde, hvor data hentes for et bestemt omrรฅde. Ideel til at hente en bestemt post baseret pรฅ sรธgenรธglen og fungerer kun godt, nรฅr hashfunktionen er pรฅ sรธgenรธglen.
Hukommelsesstyring Mange ubrugte datablokke opstรฅr fra sletning og opdatering og kan ikke frigives til genbrug, sรฅ regelmรฆssig vedligeholdelse er pรฅkrรฆvet. I statisk og dynamisk hashing administreres hukommelse altid, og bucket overflow hรฅndteres for at udvide statisk hashing.

Kort sagt, vรฆlg bestilt Indeksering til omrรฅdeforespรธrgsler og hashing til opslag med eksakt match pรฅ nรธglen.

Hvad er kollision?

En hash-kollision er en tilstand, hvor de resulterende hashes fra to eller flere elementer i datasรฆttet forkert mappes til det samme sted i hash bord.

Sรฅdan hรฅndterer du en hashingkollision

Der er to teknikker, du kan bruge til at undgรฅ en hash-kollision:

  1. Genopvarmning: Denne metode aktiverer en sekundรฆr hashfunktion, som anvendes kontinuerligt, indtil der findes et tomt slot, hvor en post kan placeres.
  2. Kรฆdning: Kรฆdningsmetoden opbygger en linket liste over elementer, hvis nรธgler hashes til den samme vรฆrdi. Denne metode krรฆver et ekstra linkfelt pรฅ hver tabelposition.

Ofte Stillede Spรธrgsmรฅl

Statisk hashing holder et fast antal buckets, sรฅ det kan overlรธbe, efterhรฅnden som data vokser. Dynamisk hashing tilfรธjer og fjerner buckets efter behov, sรฅ det tilpasser sig รฆndret datastรธrrelse uden en fuldstรฆndig genopbygning.

For rรฆkkeviddeforespรธrgsler. Hashing spreder nรธgler pรฅ tvรฆrs af buckets, sรฅ en mellem- eller stรธrre-end-forespรธrgsel kan ikke fรธre dem i rรฆkkefรธlge. Et ordnet indeks holder nรธglerne sorteret og passer bedre der.

En bucket lรธber over, nรฅr der tilfรธres flere poster, end der kan indeholdes. Ved statisk hashing er dette almindeligt, efterhรฅnden som data vokser, og det hรฅndteres af รฅbne adresseringer, kรฆder eller overflow-buckets.

AI-systemer bruger hashing til hurtig funktionssรธgning og til hashing-tricket, som mapper kategorier med hรธj kardinalitet til en fast vektor. Similarity-hashing grupperer ogsรฅ nรฆsten duplikerede poster effektivt.

Genhashing finder en anden ledig plads i den samme tabel ved hjรฆlp af en anden funktion. Kรฆdning holder poster kolliderende i en linket liste, der er knyttet til bucket'en, sรฅ tabellen i sig selv aldrig udfylder en plads to gange.

Opsummer dette indlรฆg med: