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

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

  • Upload
    tanika

  • View
    40

  • Download
    1

Embed Size (px)

DESCRIPTION

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? - PowerPoint PPT Presentation

Citation preview

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

Gegevensbanken 2010

Indexstructuren

Bettina Berendtwww.cs.kuleuven.be/~berendt

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

2

Indexstructuren:

Motivatie & Samenvatting

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

3

Waar zijn we?Les

Nr. wie wat1 ED intro, ER2 ED EER3 ED relational model4 ED mapping EER2relational5 KV relational algebra, relational calculus6 KV SQL7 KV vervolg SQL8 KV demo Access, QBE, JDBC9 KV functional dependencies and normalisation

10 KV functional dependencies and normalisation11 BB file structures and hashing12 BB indexing I13 BB indexing II and higher-dimensional structures14 BB query processing15 BB transaction16 BB query security17 BB Data warehousing and mining18 ED XML, oodb, multimedia db

Fysisch model / vragen

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

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

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

5

Dit was ook een goed idee voor het Web

... maar nu willen we toch een beetje anders zoeken ...

zoeken 1994:

lineairof

binair

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

6

Hoe werkt dat? Indexstructuren(hier: volledig geïnverteerde bestanden)

Door indexstructuren wordt efficiënt zoeken ook volgens andere criteria (velden) mogelijk

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

7

Gegevens zijn als … een goed boek (1)

Primaire index

Bestandsorganisatie

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

8

Gegevens zijn als een goed boek (2)

Secundaire index 1

Secundaire index 2

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

9

Gegevens zijn als een goed boek (3)

Multi-niveau index

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

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

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

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

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

12

hoge bestands...

Bestands-organisatie

activiteitveranderings-graad

vervangings-graad

groei

ongeordend

geordend

direct

Oefening: Vervolledig de tabel!

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

13

Agenda

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

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

14

Agenda

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

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

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

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

16

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

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

17

Agenda

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

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

18

• 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

Soorten indexen

Sluiten elkaar uit

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

19

Primaire indexen: voorbeeld

}1 blok

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

27

Clusterindexen: voorbeeld

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

28

Probleem en oplossing

• Toevoegen – records

schuiven op verandering blokadressen in index

– kan opgelost worden door aparte blokken te gebruiken voor de verschillende waarden

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

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)

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

30

Secundaire indexop sleutelveld: voorbeeld

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

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

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

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)

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

33

Secundaire index op niet-sleutel veld

• dichte index– elke waarde komt even vaak in index voor als in

gegevensbestand• index met variabele lengte 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

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

34

Secundaire indexop niet-sleutelveld: voorbeeld

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

35

Voor- en nadelen van 2-niveau indexen

+-

• toevoegen / weglaten is veel gemakkelijker

• 1 extra blok te lezen

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

36

Overzicht indexen

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

Anker : blok hangt vast aan sleutel (bemoeilijkt toevoegen / weglaten)

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

37

Agenda

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

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

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)

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

39

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

40

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

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

41

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)

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

42

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

Algoritme voor zoeken in ijle primaire multi-niveau-index naar record met sleutel K

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

43

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”)

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

44

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

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

45

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

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

46

Agenda

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

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

47

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

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

48

... maar ...

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

49

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

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

50

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)

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

51

Zoekbomen: abstract

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

52

Zoekbomen: voorbeeld(een zoekboom van orde 3)

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

53

B-bomen

• B-boom van orde m (m > 2) is zoekboom waarvoor :– elke inwendige knoop heeft hoogstens m kinderen– de wortel heeft minstens 2 kinderen, elke andere knoop

minstens m / 2 – alle bladeren zitten even diep– "waarde" in B-boom = sleutel + adres– speciale gevallen: 2 - 3 bomen, 3 - 5 bomen, ...

– beperkingen i.v.m. min en max aantal kinderen garanderen • redelijke gebalanceerdheid• beperkte verspilling van geheugen

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

54

Adressen in knopen van B-bomen

• Adres is een blokadres of recordadres– recordadres = blokadres + positie van record in blok

• voor niet-sleutelveld:– adres van blok met wijzers naar adressen (cfr. eerdere

voorbeelden) extra indirectie

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

55

Maximale hoogte van B-bomen

• orde p minstens d = p / 2 deelbomen per knoop• op niveau 1 (onder wortel)

– minstens 2 knopen, • op niveau i

– minstens 2 di-1 knopen 2 di-1 (d-1) waarden h logd ( (n + 1) / 2 )

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

56

B-bomen: abstract en voorbeeld

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

57

Voorbeeld 2 (1):Berekening orde B-boom• Stel:

– grootte van veld waarop gezocht wordt V = 9 bytes– B = 512 bytes– recordadres Pr = 7 bytes, blokadres P = 6 bytes

• 1 knoop van B-boom moet in 1 blok passen– max aantal deelbomen p van een knoop:

• p * P + (p - 1) * (Pr + V) B• 6 p + 16 (p - 1) 512• p 24 • meestal nog wat extra (administratieve) info in blok kies p = 23

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

58

Voorbeeld 2 (2):Aantal blokken en diepte

– empirisch onderzoek toont: B-boom gemiddeld 69% vol• dus:

– Gemiddeld 0.69p = 0.69 x 23 = 16 wijzers• gemiddelde fan-out fo = 16• gemiddeld aantal waarden per knoop = 15

– wortel : 15 sleutels– 1 niveau onder wortel :

• 16 knopen 16 * 15 = 240 sleutels– 2 niveaus diep:

• 162 = 256 knopen, 3 840 sleutels– 3 niveaus diep:

• 163 = 4 096 knopen, 61 440 sleutels– totaal voor 3 niveaus:

• 61 440 + 3 840 + 240 + 15 = 65 535

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

59

-

Wanneer B-bomen gebruiken?

• Gebruik van B-bomen als primaire bestandsorganisatie– dus niet voor index op bestand, maar bestand zelf– 1 waarde in knoop = sleutel + het hele record

• Enkel goed bruikbaar indien– klein aantal records– kleine recordgrootte

• Anders fo te klein # niveaus van boom te groot inefficiënt

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

60

Operaties en hun kost/efficiëntie

+

+

-

• Opzoeken : O (logd n)• Toevoegen, weglaten:

– eerst positie opzoeken– wijziging aanbrengen en doorvoeren– alles in O (logd n) tijd

• Sequentiele verwerking:– boom doorlopen in in-orde (links, knoop, rechts)– interne knopen vaak opnieuw gelezen, tenzij ze in centraal

geheugen onthouden worden– kan beter : met B+-bomen

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

61

B+-bomen

• Bij B-bomen: – sommige record-wijzers in interne knopen, andere in bladeren

• Bij B+-bomen: – interne knopen bevatten enkel sleutels, geen adressen van

records• recordadressen enkel in de bladeren• interne knopen bevatten enkel "wegwijzers"• orde pi van interne knopen is nu groter betere prestaties; orde pb

van bladeren ongeveer even groot

• extra: – aan het eind van een blad wijzer naar volgend blad

• maakt sequentieel doorlopen eenvoudiger

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

62

B+-bomen: abstract

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

63

Voorbeeld 3 (1):Berekening orde B+-boom• Gegeven:

– V = 9 bytes, B = 512 bytes, Pr = 7 bytes, P = 6 bytes• orde van interne knopen:

– pi * P + (pi - 1) * V B

– 6 pi + 9 (pi - 1) 512

– pi = 34 (cfr. 23 voor B-boom)

• orde van bladeren:– pb * (Pr + V) + P B

– pb * ( 7 + 9 ) + P B

– 16 pb + 6 512

– pb = 31

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

64

Voorbeeld 3 (2):Aantal sleutels en diepte

– Stel 69% vol– dan:

• 0.69 * 34 = 23 wijzers per knoop (22 waarden)• in blad: 0.69 * pb = 0.69 * 31 = 21 recordwijzers

– gemiddeld aantal sleutels op elk niveau:• wortel: 1 knoop, 22 sleutels• niveau 1: 23 knopen, 506 sleutels• niveau 2: 529 knopen, 11 638 sleutels• bladeren: 12 167 knopen, 255 507

recordwijzers– Vgl. met 65 536 recordwijzers voor B-boom

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

65

Algoritmes

• Algoritmes voor – zoeken in B+-boom en – voor aanpassing van B+-boom bij toevoegen / weglaten van

gegevens

– Gedetailleerde algoritmes in boek

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

66

B+-boom: Opzoeken van een sleutelwaarde

{ K = gezochte sleutel }n := blok dat wortel van B+-boom bevat;lees blok n;zolang n geen blad is:

q := #deelbomen van n;v0=- , v1..vq-1 waarden in knoop, vq=+ kies i zo dat vi < K <= vi+1;n := bi;lees blok n;

zoek in n een koppel (vi, Pri) met vi=K;indien gevonden: lees record met adres Prianders: meld 'niet gevonden'

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

67

B+-boom: Toevoegen van een record met sleutel K

• zoek blad waar sleutel hoort• indien niet vol: voeg sleutel gewoon toe• indien blad al vol: splits blad

– 1e helft blijft, 2e helft naar nieuw blad– voeg sleutel toe aan juiste blad– pas ook bladwijzers aan– voeg laatste waarde van blad 1 in ouderknoop toe

• herhaal zolang ouderknoop overvol is:– splits knoop : helft van waarden naar nieuwe knoop; verhuis

laatste waarde van 1e knoop naar ouder

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

68

Oefening: toevoegen van ...

8, 5, 1, 7, 3, 12, 9, 6

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

69

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

70

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

71

Alternatieve oplossing

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

72

B+-boom: Verwijderen van een sleutel K uit gegevens

• zoek blad met sleutel, verwijder sleutel daaruit• indien sleutel ergens in interne knopen voorkomt:

– vervang door waarde net links ervan• indien onderloop (te weinig waarden in blad):

– steel enkele waarden van naburig blad (en pas bovenliggende knoop aan)

– indien nog niet voldoende: voeg 2 bladeren samen– verwijder 1 wegwijzer uit bovenliggende knoop

• indien onderloop in interne knoop:– herverdeel of voeg samen (met evt. verwijdering van 1 waarde

uit bovenliggende knoop...)

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

73

Oefening: verwijderen van ...

5, 12, 9

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

74

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

75

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

76

B*-bomen

• elke knoop tenminste 2/3 gevuld (i.p.v. ½)– splits slechts wanneer 2 naburige knopen vol zijn

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

82

Agenda

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

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

83

Indexen op meerdere velden

• vb. index op combinatie van leeftijd en departement– "geef alle werknemers van dept. 5 met leeftijd 60"– met aparte indexen: eerst verz. werknemers van dept. 5 (A),

dan verz. met leeftijd 60 (B), vervolgens doorsnede nemen niet zo efficiënt

• resultaat waarschijnlijk veel kleinere verzameling dan A en B– Samengestelde index veel efficiënter:

• levert direct het goede resultaat

• Hoe indexeren op meerdere velden?

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

84

Hoe de velden combineren? (1)

• Meerdere velden samen als 1 veld beschouwen– Samengestelde waarden: ordening?

• lexicografisch : cf. alfabetische ordening• (p1, q1) < (p2, q2) p1 < p2 OF (p1 = p2 en q1< q2)• enz. voor meer componenten

• Hashing op samengestelde velden: "partitioned hashing"– resultaat hashfunctie is combinatie van resultaten van aparte

hashfuncties op componenten– bv.

• 5 101; • 60 10110 (5, 60) 10110110

– geen aparte toegangsstructuren voor componenten nodig (maar: enkel voor "="-tests)

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

85

Hoe de velden combineren? (2)

• i.p.v. rij met adressen : matrix met adressen– indices voor matrix = waarden van componenten

• evt. code voor interval van waarden

– vb. matrix M: M5,5 bevat wijzer naar cel met wijzers naar records waarvoor dept = 5 en leeftijd > 50

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

86

Fysische en logische indexen

• Naast bomen ook hashing of andere datastructuren mogelijk voor index

• In onze bespreking: fysische indexen– steeds fysische adressen gebruikt– indien deze veel wijzigen: probleem– logische index verhelpt dit:

• i.p.v. fysisch adres, wordt sleutel voor primaire bestandsorganisatie teruggegeven

• dan zoeken volgens primaire structuur– nadeel van logische index: 1 extra indirectie

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

87

Indexen: samenvatting

• Grootste voordeel van indexen:– kunnen in principe gebruikt worden met eender welke primaire

bestandsorganisatie– bemerk dat primaire organisatie enkel efficiënt zoeken op 1

veld mogelijk maakt• Indexen o.a. handig voor opleggen van uniciteit van velden

(naast efficiënt opzoeken van waarden)• Bestand met secundaire index op elk veld = "volledig

geïnverteerd bestand" (fully inverted file)

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

88

Vooruitblik

Indexen: definitie

Soorten indexen

Indexen met meerdere niveaus

Boomstructuren als indexen

Indexen op meerdere velden

Meerdimensionale structuren

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

89

Bronnen

• Deze slides zijn gebaseerd op Henk Olivié‘s slides voor Gegevensbanken 2009 en op Elmasri & Navathe, Fundamentals of Database Systems, Addison Wesley / Pearson, 5e editie 2007.

• Alle kopieën zonder bronspecificatie: Elmasri & Navathe, Fundamentals of Database Systems, Addison Wesley / Pearson, 5e editie 2007.

• Verdere figuren: bronnen zie “Powerpoint comments field”• Bedankt iedereen!