850 likes | 1.01k Views
Gegevensbanken 2012 H ashing en Indexstructuren I Bettina Berendt http://people.cs.kuleuven.be/~bettina.berendt/. Externe hashing: Motivatie & Samenvatting. Waar zijn we?. Les # wie wat 1 ED intro, ER 2 ED EER, (E)ER naar relationeel schema 2 ED relationeel model
E N D
Gegevensbanken 2012Hashing en Indexstructuren IBettina Berendthttp://people.cs.kuleuven.be/~bettina.berendt/
Waar zijn we? Les # wie wat 1 ED intro, ER 2 ED EER, (E)ER naar relationeel schema 2 ED relationeel model 3 KV Relationele algebra & relationeel calculus 4,5 KV SQL 6 KV Programma's verbinden met gegevensbanken 7 KV Functionele afhankelijkheden & normalisatie 8 KV PHP 9 BB Beveiliging van gegevensbanken 10 BB Geheugen en bestandsorganisatie 11 BB Hashing en Indexstructuren I 12 BB Hashing en Indexstructuren II 13 BB Queryverwerking 14,15 BB Transactieverwerking en concurrentiecontrole 16 BB Data mining en data warehousing 17 ED XML, NoSQL Fysisch model / vragen
Herhaling – Hashed bestanden: idee Waar is de sla? In de groene la!
Wat doen als de keuken te klein is? * Het brood ligt in de slaapkamer * De eieren liggen in de eetkamer
Externe hashing Het brood ligt in de slaapkamer * De eieren liggen in de eetkamer
Wat is een index? Wat is een index? (1) – wijzen
Wat en waarvoor een index? (3) – vinden (hier: volledig geïnverteerde bestanden)
Overzicht: functionele types van indexen (1) Bestandsorganisatie Primaire index
Overzicht: functionele types van indexen (2) Secundaire index 1 Secundaire index 2
Overzicht: functionele types van indexen (3) Multi-niveau index
Vraag: waarom deze twee opties?(MySQL als maar een voorbeeld) → dit zijn twee structurele types van indexen → vraag te beantwoorden aan het einde van deze les!
De twee hoorcolleges: 2 foci • Hashing en Indexstructuren I: • Basisideen; indexen als bestanden • principes van de les over bestandsorganisatie toepassen • Hashing en Indexstructuren II: • „slimmere ideen“; operaties op indexen • hoe werkt het?
Agenda Hashing - idee en interne hashing Externe statische hashing Indexen: definitie Soorten indexen Indexen met meerdere niveaus (statisch; intro dynamisch/bomen)
Agenda Hashing - idee en interne hashing Externe statische hashing Indexen: definitie Soorten indexen Indexen met meerdere niveaus (statisch; intro dynamisch/bomen)
Hashing-bestandsorganisatie • Methode om uit recordsleutel meteen recordadres in bestand te vinden: hashing • Principe van hashing: • hash-functie beeldt waarde k (getal, string, ...) af op adres f(k) • goede hashfunctie "spreidt" waarden zoveel mogelijk over verschillende adressen • botsing ("collision") : f(k1) = f(k2) met k1 k2 • Interne hashing: • gegevens en hashfunctie zijn in centraal geheugen voorgesteld • Externe hashing: • gegevens (evt. ook hashfunctie zelf) opgeslagen in een bestand
Interne hashing • Voorbeeld van interne hashing: • tabel t als rij voorgesteld • elke plaats een cel (bucket, bin), kan 1 of een aantal records bevatten • celdiepte aantal records dat maximaal in 1 cel gaat • index van rij 0 .. m-1 • hash-functie f(k) = k modulo m • gegeven sleutel k adres: t [ f(k) ] • sleutelruimte • = verzameling mogelijke sleutels • adresruimte • = verzameling mogelijke adressen (grootte m) • # sleutelruimte >> # adresruimte • f(k) moet sleutels bij voorkeur zo gelijkmatig en willekeurig mogelijk spreiden, en moet efficiënt te berekenen zijn (snelheid!)
Hashing functies: voorbeeld • f(k) = k mod 1000 • # adresruimte = 1000 • sleutel k = 8 321 472 f(k) = 472 • 3 laatste cijfers zijn bepalend niet zo goed • wat als sleutels bv. altijd op 000 eindigen? alle sleutels afgebeeld op zelfde adres! • modulo priemgetal is betere keuze • alle cijfers van sleutel hebben invloed • bv. f(k) = k mod 997 : # adresruimte = 997
Andere technieken voor hashing • Nog: voor numerieke sleutels • vouwen • bv. getal in stukken splitsen, opvouwen als blad papier en op elkaar liggende cijfers optellen • 270 122 601 270, 122, 601 270 + 122 + 106 = 498 • kwadrateren + en middelste cijfers nemen • 375 213 2 = 140 784 795 369 479 • Niet-numerieke sleutels numeriek coderen • bv. strings : via ASCII-code (of Unicode) • Steeds gericht op gelijkmatige en willekeurige spreiding van uitkomsten
Botsingsafhandeling • Botsing: • meerdere records met verschillende sleutel komen terecht in zelfde cel • Meestal: # sleutelruimte >> # adresruimte • botsingen zijn dan onvermijdelijk • moeten op een of andere manier opgevangen worden ("collision resolution") • Eenvoudige manier van botsingsafhandeling: • tabel van cellen, meerdere records in 1 cel toelaten • celdiepte = max # records in 1 cel (te groot: kan niet!) • Indien teveel records aan 1 cel toegekend worden: overloop • meerdere technieken van overloopafhandeling
Overloopafhandeling (1) Open adressering: idee 151 152 153 254 255 Open addressing: Hash collision resolved by linear probing (interval=1). Hash collision resolved by open addressing with linear probing (interval=1). Note that "Ted Baker" has a unique hash, but nevertheless collided with "Sandra Dee" which had previously collided with "John Smith".
Overloopafhandeling (1): Open adressering + - - • Open adressering • indien geen plaats in cel: loop volgende cellen af tot er een is waar plaats is • zeer eenvoudig • lineair zoeken naar cel (traag) • weglaatalgoritme nogal ingewikkeld
Open adressering (strings): toevoegen {sleutel k = string van N tekens; #adresruimte = M} {hashfunctie} temp := 1; voor i := 1 tot N : temp := temp * code(k[i]); a := temp mod M; {botsingsafhandeling} als locatie a vol is dan i := (a + 1) mod M; zolang i <> a en locatie i bezet : i := (i+1) mod M; als i = a dan mislukt {alle locaties zijn vol} anders a := i; {record kan op locatie a gezet worden}
Overloopafhandeling (2): Ketening - • Ketening • indien geen plaats in cel: verwijzing naar nieuwe cel waar record (ofwel een nieuwe verwijzing) staat • opeenvolging van verwijzingen genereert "keten" van wijzers (gelinkte lijst) • meerdere varianten: • coalesced chaining: lijsten hebben gemeenschappelijke delen • separate chaining : lijsten zijn volledig gescheiden • direct chaining: geen records in tabel, maar steeds meteen een verwijzing naar het overloopgebied • nadeel: sequentiële toegang zeer langzaam • apart "overloopgebied" voor dergelijke nieuwe cellen
Botsingafhandeling door ketening (hetzelfde in een array)
Ketening: voordelen en nadelen + + - - • record snel bereikbaar via sleutel • toevoegen en weglaten redelijk eenvoudig • opzoeken via ander dan sleutelveld is moeilijk • doorlopen van bestand in sleutelvolgorde kan traag zijn
Waarschuwing: terminologie! • Open adressering = gesloten hashing • Botsing record gaat naar een ander slot in dezelfde tabel • Gesloten adressering = open hashing = ketening • Botsing record(s) in een andertabel opslaan
(Extra) Performantie van hashingtechnieken • Maatstaf : E: gemiddelde zoeklengte • aantal bezochte plaatsen tot element gevonden wordt • Beïnvloed door vullingsgraad • aantal opgeslagen sleutels n / aantal beschikbare locaties m • = n / m vuistregel: tussen 0,7 en 0,9 • Knuth’s formule: bij lineair proberen • E ½ ( 1 + 1 / (1- ) ) bij succes • ½ ( 1 + 1 / (1- )2 ) bij falen • formule is minder goed voor dicht bij 1
Agenda Hashing - idee en interne hashing Externe statische hashing Indexen: definitie Soorten indexen Indexen met meerdere niveaus (statisch; intro dynamisch/bomen)
Externe hashing (gegevens in bestand) • cellen = "buckets" • 1 cel = 1 blok of meerdere aaneengesloten blokken • hashingfunctie: • sleutel cel-nr • tabel in bestandshoofding: • cel-nr blok-adres • overloop: • in extra overloopcellen • via wijzers een keten van extra records bijhouden • wijzers wijzen naar recordadres : blokadres + relatieve positie in blok
Externe “static” hashing: voor- en nadelen + + - - - • record snel bereikbaar via sleutel ) • toevoegen en weglaten redelijk eenvoudig ) Ketening • opzoeken via ander dan sleutelveld is moeilijk ) • doorlopen van bestand in sleutelvolgorde kan traag zijn ) • En: • vaste ruimte gereserveerd voor bestand (“static hashing”) • indien te groot: veel verloren ruimte • indien te klein: veel overloop snelheidsverlies • na een tijdje eventueel reorganisatie nodig
Agenda Hashing - idee en interne hashing Externe statische hashing Indexen: definitie Soorten indexen Indexen met meerdere niveaus (statisch; intro dynamisch/bomen)
Indexstructuren • Definitie: • een index op een bestand = een gegevensstructuur die de toegang op dat bestand via een bepaald veld (of een groep velden) efficiënter maakt • d.w.z.: laat efficiënt zoeken naar een bepaalde waarde van dat veld toe • vgl.: woordenlijst achteraan boek, fichebak in bibliotheek, ... • Index kan opgeslagen zijn: • in centraal geheugen (enkel redelijk kleine indexen) • in een bestand in het externe geheugen
Vraag: Op welke velden zouden het nuttig zijn om een index te plaatsen?
Agenda Hashing - idee en interne hashing Externe statische hashing Indexen: definitie Soorten indexen Indexen met meerdere niveaus (statisch; intro dynamisch/bomen)
Soorten indexen • primaire index : index op veld dat • de ordening van het bestand bepaalt • records zijn uniek geïdentificeerd (d.w.z. elke waarde voor het veld is uniek) • clusterindex : index op veld dat • de ordening van het bestand bepaalt • niet noodzakelijk unieke waarden • secundaire index : index op een ander veld dan dat wat de ordening bepaalt Sluiten elkaar uit
Primaire indexen: voorbeeld }1 blok
Primaire indexen • Primaire index: • bestand • met vaste lengte records • fysisch geordend volgens de sleutelwaarden • index: bevat 1 record per blok in het gegevensbestand: • sleutel van "ankerrecord" van het blok (= eerste of laatste record in het blok) • adres van het blok • Gegeven een sleutelwaarde, kan adres van blok waar overeenkomstig record zit, gevonden worden door zoeken in index i.p.v. gegevensbestand • d.i. dankzij de ordening in het bestand