1 / 84

Gegevensbanken 2010 Indexstructuren Bettina Berendt cs.kuleuven.be/~berendt

Gegevensbanken 2010 Indexstructuren Bettina Berendt www.cs.kuleuven.be/~berendt. Indexstructuren: Motivatie & Samenvatting. Waar zijn we?. Fysisch model / vragen. Herhaling: Bestandsorganisatie. Vraag : Waar/hoe gegevens plaatsen?

tanika
Download Presentation

Gegevensbanken 2010 Indexstructuren Bettina Berendt cs.kuleuven.be/~berendt

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gegevensbanken 2010IndexstructurenBettina Berendtwww.cs.kuleuven.be/~berendt

  2. Indexstructuren: Motivatie & Samenvatting

  3. Waar zijn we? Fysisch model / vragen

  4. Herhaling: Bestandsorganisatie • Vraag: Waar/hoe gegevens plaatsen? • Antwoord: Zo plaatsen dat de kost van operaties geminimaliseerd wordt (zoeken, invoegen, verwijderen, ...) • Randvoorwaarde: fysica - alles moet ergens zijn, en alles is op een plaats.  Door de juiste bestandsorganisatie wordt efficiënt zoeken volgens de „primaire“, fysische structuur mogelijk

  5. Dit was ook een goed idee voor het Web lineair of binair zoeken 1994: • ... maar nu willen we toch een beetje anders zoeken ...

  6. Hoe werkt dat? Indexstructuren(hier: volledig geïnverteerde bestanden)  Door indexstructuren wordt efficiënt zoeken ook volgens andere criteria (velden) mogelijk

  7. Gegevens zijn als … een goed boek (1) Bestandsorganisatie Primaire index

  8. Gegevens zijn als een goed boek (2) Secundaire index 1 Secundaire index 2

  9. Gegevens zijn als een goed boek (3) Multi-niveau index

  10. PS: Dit is ook een index(of: we moeten nog dingen van de vorige les vervolledigen) * als bruin: bucket 1 * als groen: bucket 2

  11. [Nog iets over les #11] Herhaling: Belangrijke parameters m.b.t. bestandsverwerking • Bestandsactiviteit (file activity) # records dat gebruikt wordt door een toepassing / totaal # records van het bestand • Bestandsveranderingsgraad (file volatility) # records dat in een bepaalde periode een verandering ondergaat / totaal # records van het bestand • Bestandsverloop of vervangingsgraad (file turnover) # records dat in een bepaalde periode vervangen wordt door nieuwe records / totaal # records van het bestand • Bestandsgroei (file growth) toename van # records gedurende een bepaalde periode / het oorspronkelijk totaal # records

  12. Oefening: Vervolledig de tabel!

  13. Agenda Indexen: definitie Soorten indexen Indexen met meerdere niveaus Boomstructuren als indexen Indexen op meerdere velden

  14. Agenda Indexen: definitie Soorten indexen Indexen met meerdere niveaus Boomstructuren als indexen Indexen op meerdere velden

  15. 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

  16. Vb.: Op welke velden zouden het nuttig zijn om een index te plaatsen?

  17. Agenda Indexen: definitie Soorten indexen Indexen met meerdere niveaus Boomstructuren als indexen Indexen op meerdere velden

  18. Soorten indexen • primaire index : index op veld dat • de ordening van het bestand bepaalt • records 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

  19. Primaire indexen: voorbeeld }1 blok

  20. 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

  21. Eigenschappen en voordelen + • index bevat kleinere records dan gegevensbestand • enkel sleutel + adres, geen andere info • index bevat meestal minder records dan gegevensbestand • is een niet-dichte of ijle (nondense, sparse) index  index is kleiner dan gegevensbestand  doorlopen van index gaat sneller dan doorlopen van gegevensbestand  veel minder toegang tot schijf nodig

  22. Probleem en oplossing - • Toevoegen / weglaten van gegevens: nu ingewikkelder! • Naast gegevensbestand ook index aanpassen • ankerrecords kunnen veranderen • Oplossing: • voor toevoegen: overloopgebieden • voor weglaten: markeren van weggelaten records • na een tijdje: reorganisatie

  23. Berekening van performantie van indexen • Berekening van tijdswinst door index • Toegang tot hoeveel blokken is nodig? • Gegevensbestand gekenmerkt door • # records r • # blokken b =  (r / bfr)  • recordlengte R • bloklengte B • blocking factor bfr = B / R (hoeveel records in één blok?) • Indexbestand : analoog ri, bi, Ri, Bi, bfri • meestal Bi = B • met ankerrecords: ri = b • dichte index: ri = r

  24. Voorbeeld 1 (1): de gegevens • Geordend gegevensbestand: • r = 30 000 • R = 100 bytes, B = 1 024 bytes  bfr = 1024 / 100 =10 • b = r / bfr  = 30 000 / 10  = 3 000 • Binair zoeken op gegevensbestand: • # schijftoegangen = log2 b  = log2 3 000 = 12

  25. Voorbeeld 1 (2): primaire index • Indexbestand: • vb. sleutel = 9 bytes, blokadres = 6 bytes • Ri = 9 + 6 = 15 bytes  bfri = 1024 / 15  = 68 • ri = b = 3 000  bi = ri / bfri = 3 000 / 68  = 45 • binair zoeken op indexbestand: • # schijftoegangen = log2 bi = log2 45  = 6 • Uiteindelijk ook nog blok met gegevens inlezen: • 1 extra blok  7 in totaal (i.p.v. 12)

  26. Clusterindex • Gegevensbestand • fysisch geordend volgens veld dat niet uniek is • dat veld is dus geen sleutel • wel "clusterveld" genoemd (records met zelfde waarde voor dat veld zitten gegroepeerd) • Clusterindex: • per waarde van clusterveld 1 wijzer naar blok waar eerste record met die waarde voorkomt  ijle index

  27. Clusterindexen: voorbeeld

  28. Probleem en oplossing • Toevoegen • records schuiven op  verandering blokadressen in index • kan opgelost worden door aparte blokken te gebruiken voor de verschillende waarden

  29. Secundaire index + • Index op een ander veld dan het veld dat de ordening bepaalt • index zelf is wel geordend volgens dat veld • veld kan al dan niet een sleutel zijn • Indien dit een secundair-sleutel-veld is: • 1 record in index per record in gegevensbestand • geen ordening  enkel ankerrecords is onvoldoende  dichte index • nog steeds kleiner dan gegevensbestand omdat records zelf kleiner zijn (maar minder spectaculair)

  30. Secundaire index op sleutelveld: voorbeeld

  31. Voordelen + + • Hoewel index zeer groot kan zijn: toch grote tijdswinst • index is geordend  binair zoeken mogelijk • vs. gegevensbestand: lineair zoeken nodig! • Eens blok gevonden: enkel nog lineair zoeken binnen blok • in intern geheugen  gaat snel • bfr meestal relatief klein  verwaarloosbaar vs. inlezen van blokken

  32. Voorbeeld 1 (3): dichte secundaire index • Uit het vorige voorbeeld: • r = 30 000, R = 100 bytes, B = 1 024 bytes, b = 3 000 • Lineair zoeken in dit bestand: • gemiddeld b / 2 = 1 500 blokken inlezen • Met (dichte) secundaire index: • stel veld 9 bytes, adres 6 bytes  Ri=15 • ri = r = 30 000, • bfri = 68  bi = 30 000 / 68 = 442 • binair zoeken : log2 bi = log2 442  = 9 blokken • opmerking: controle of record voorkomt, bij dichte index, kan zonder gegevens zelf in te lezen • + 1 voor gegevens zelf : 10 blokken lezen (i.p.v.1500)

  33. Secundaire index op niet-sleutel veld • dichte index • elke waarde komt even vaak in index voor als in gegevensbestand • index met variabelelengte records • per waarde een lijst wijzers naar blokken • index met verwijzingen naar blok recordwijzers • m.a.w. 1 adres per waarde • adres wijst naar blok (evt. lijst van blokken) met wijzers naar blokken in gegevensbestand  1 indirectie meer

  34. Secundaire index op niet- sleutelveld: voorbeeld

  35. Voor- en nadelen van 2-niveau indexen + - • toevoegen / weglaten is veel gemakkelijker • 1 extra blok te lezen

  36. Overzicht indexen Anker : blok hangt vast aan sleutel (bemoeilijkt toevoegen / weglaten) Indexveld is Indextype (op veldtype) # index records dicht of ijl Blokanker op Gege- vensbestand (GB) ? ordenend veld primair (sleutel) # blokken in GB ijl ja clustering (niet-sleutel) # verschillende indexveld-waarden ijl ja / neen niet- ordenend veld secundair (sleutel) # records in GB dicht neen secundair (niet-sleutel) # records in GB of # verschillende indexveld-waarden dicht of ijl neen

  37. Agenda Indexen: definitie Soorten indexen Indexen met meerdere niveaus Boomstructuren als indexen Indexen op meerdere velden

  38. Indexen met meerdere niveaus • Principe: • Gewone index op gegevensbestand kan nog steeds groot zijn •  opnieuw een index bouwen bovenop deze index • laat toe waarden sneller terug te vinden in deze index • = niveau 2 index • eventueel hierbovenop nog een index, enz. • tot top-index maar 1 blok groot is • Blocking factor bfri even groot voor alle indexen = "fan-out" (fo)

  39. Hoeveel blokken op welk niveau? • 1e niveau: • r1 = r records r1 / fo  blokken • 2e niveau: • r2 = r1 / fo  records r2 / for1 / fo2 blokken • ke niveau: • rkr1 / fok blokken • hoogste niveau • 1 blok •  aantal niveaus t logfo (r1) • vgl. met log2 (r1) voor binair zoeken • hoe groter fo, hoe minder blokken te lezen

  40. Voorbeeld 1 (4): als multi-niveau index • Stel dat de dichte secundaire index uit voorbeeld 2 nu een multi-niveau index is • fo = bfri = 68 • 1e niveau: • 442 blokken (zie eerder) • 2e niveau: • b1 / fo = 442 / 68  = 7 blokken • 3e niveau: • 7 / 68  = 1 blok  topniveau • Controleren of een waarde voorkomt: • 3 blokken lezen • Ophalen van gegevens zelf: • 4 blokken (vgl. 10 met binair zoeken, 1 500 zonder index)

  41. Algoritme voor zoeken in ijle primaire multi-niveau-index naar record met sleutel K p := adres van top-blok van index; voor j := t tot 1: lees blok met adres p (op niveau j in index); zoek in p een record i zodat Kj(i) <= K <= Kj(i+1); p := pj(i); lees het blok gegevens met adres p; zoek in p naar het record met sleutel K

  42. Praktijkvoorbeeld: ISAM • IBM's ISAM = "Indexed Sequential Access Method" • is een speciaal geval van een multi-niveau indexstructuur • 2-niveau indexstructuur: • 1e niveau: cilinderindex • sleutel van ankerrecord voor die cilinder + wijzer naar spoorindex van die cilinder • 2e niveau: spoorindex • sleutel van ankerrecord voor spoor + wijzer naar spoor (nu vervangen door VSAM, “virtual storage access method”)

  43. Operaties in multi-niveau indexen + - • Weglaten: • door te markeren • Toevoegen: • m.b.v. overloopgebieden • Na een tijdje: reorganisatie • heel het bestand wordt sequentieel doorlopen en herschreven naar nieuw bestand • overloop en markeringen worden opgeruimd • nieuwe index wordt gebouwd op nieuw bestand • Voordelen: • snelle toegang tot bestand, toevoegingen en weglatingen tamelijk efficiënt • Nadelen: • overloop werkt vertragend, verkwisting van ruimte, geregelde reorganisatie vraagt tijd

  44. Statische en dynamische structuren • Problemen met toevoegen / weglaten van records • doordat elk niveau van de indexboom fysisch geordend is • hele boom van indexen moet aangepast worden • Meer dynamische structuren kunnen oplossing bieden: B-bomen, B+-bomen

  45. Agenda Indexen: definitie Soorten indexen Indexen met meerdere niveaus Boomstructuren als indexen Indexen op meerdere velden

  46. Boomstructuren als indexen + • Binaire zoekboom is geordend: • 1 waarde in knoop • in linkerdeelboom enkel kleinere waarden • in rechterdeelboom enkel grotere waarden • Opzoeken van waarde vraagt tijd evenredig met hoogte h van boom • "gewoonlijk" : • h  log2 n • met n = # waarden in de boom • dus: zoeken is efficiënt

  47. ... maar ...

  48. Evenwichtigheid • Aanpassen van boom (toevoegen, weglaten): ook tijdscomplexiteit evenredig met h • gemiddeld dus ook efficiënt • MAAR: aanname van "evenwichtigheid" van bomen wordt gemaakt! • Niet onmogelijk dat h  n i.p.v. log2 n • vb. bij eenvoudig toevoeg-algoritme dat waarden reeds in volgorde krijgt •  concept van evenwichtige zoekbomen • toevoegen, weglaten worden zo geïmplementeerd dat evenwicht steeds bewaard blijft

  49. Zoekbomen • Een zoekboom (niet noodzakelijk binaire) • heeft in elke knoop een aantal waarden • v1 < v2 < ... < vm - 1 (m kan variëren van knoop tot knoop) • heeft in een knoop met m - 1 waarden • m kinderen b1, ..., bm • voor alle waarden v die voorkomen in bi geldt: • vi - 1 < v < vi (v0 = - , vm = + ) • Consistent met binaire zoekbomen (overal m = 2)

More Related