• Nem Talált Eredményt

Adatbázisok elmélete 19. el ˝ oadás

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Adatbázisok elmélete 19. el ˝ oadás"

Copied!
7
0
0

Teljes szövegt

(1)

Adatbázisok elmélete 19. el ˝ oadás

Katona Gyula Y.

Budapesti M ˝uszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz.

I. B. 137/b

kiskat@cs.bme.hu

http://www.cs.bme.hu/˜kiskat

2005

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 1/26

Növelhet ˝ o hash

Kiküszöböli a vödrös hash azon hibáját, hogy nem tud alkalmazkodni a gyorsan növ ˝o állományhoz.

F ˝o elvek:

• kiszámoljukh(K)-t, de az eredménynek csak az els ˝o (vagy utolsó) pár jegye számít abban, hogy melyik rekord hova kerül

• dinamikusan változik, hogy hány bit számít és ezzel együtt az is, hogy hány vödör lesz

• a vödrök mérete fix, tipikusan egy blokkból állnak. Így majd a m ˝uveletek 1 lapeléréssel menni fognak, egy kis bels ˝o memóriában való keresgélés után.

Növelhet ˝ o hash

Jellemz ˝ok:

• adváltozó mindig a struktúra aktuális globális mélységét tárolja, ennyi bitig számíth(K) értéke

2dbejegyzés lesz a vödörkatalógusban, mert2ddarabdhosszú bitsorozat van

• a vödörkatalógus most is egy mutatókból álló (most éppen2delem ˝u) tömb

• a vödrök száma2d-nél lehet kevesebb is, ha több mutató is mutat ugyanarra a vödörre

A m ˝uveletek közös vonása:kiszámoljukh(K)-tdbitig és aztán a vödörkatalógush(K)-hoz tartozó mutatója alapján elmegyünk abba a vödörbe (blokkhoz), ahol az ezendbittel kezd ˝od ˝o h(K)érték ˝u rekordok vannak.

Ha két mutató ugyanoda mutat, akkor különböz ˝odhosszú bitsorozattal kezd ˝od ˝oh(K)érték ˝u rekordok ugyanoda kerülnek.

Minden vödörnek van egy lokális mélysége, ezt ad0változó tárolja.Ez azt mutatja, hogy az ebbe a vödörbe kerülésnél az els ˝o hány darab bit számít. Természetesend0dáll minden vödörre,d0<dakkor van, ha több mutató ugyanoda mutat.

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 3/26

A struktúra felépítése

A struktúra vázlatad=3esetén:

010 000 001 011 100 101 110 111

2 3 3 2 2

Miveld=3, ezért az els ˝o három bitig számoljuk kih(K)-t.Most összesen öt vödör van a lehetséges maximális nyolc helyett, mert azok a rekordok, amiknek ah(K)-ja 00-val kezd ˝odik elférnek egy vödörben, itt már az els ˝o két bit alapján tudjuk, hogy melyik vödörbe kerül a rekord.Hasonló a helyzet a 01 és 11 kezdet ˝uh(K)értékekkel is. Egyedül az 10 els ˝o két bit esetén számít, hogy mi a harmadik (az 10 kezdet ˝uek nem férnek el egy vödörben).

(2)

M ˝ uveletek megvalósítása

keresés: az adottKkeresési kulcsra kiszámoljukh(K)els ˝odbitjét, a vödörkatalógus megfelel ˝o mutatója alapján tudjuk, hogy honnan kell beolvasni az egy blokkból álló vödröt, amiben a rekordnak lennie kell

beszúrás: beszúrni kívánt rekord K értékére kiszámoljukh(K)-t, vödörkatalógus mutatóját követve behozzuk a blokkot, ahova kerülnie kell.Ha beleférez a rekord is, akkor

belerakjuk és kiírjuk a blokkot.

Ha nem fér bele,akkor szét kell szedni a blokkot két részre, egy vödör helyett lesz kett ˝o.

Két eset van:

? Had0<d, a vödör lokális mélysége kisebbd-nél:d0:=d0+1dlesz, a

vödörkatalógus nem változik, csak az eddig ugyanarra a vödörre mutató két mutató most majd két külön blokkra mutat:

d’

...1

...0 ...0

...1

d’+1 d’+1 Természetesen az eddig egy vödörben lev ˝o rekordokat szét kell válogatni aszerint, hogy ad0+1-edik bitje mi ah(K)-nak

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 5/26

? Had0=d, azaz már nem lehet növelni a lokális mélységetdváltoztatása nélkül:

d :=d+1, a vödörkatalógust megduplázom egyx1. . .xdbejegyzés helyett lesz kett ˝o:

x1. . .xd0ésx1. . .xd1, az ezekb ˝ol kiinduló két mutató ugyanoda megy, ahova a

korábbi egy, a lokális mélység nem változik.

...0 ...1

... d’ d’

Ezek után már végrehajtható a vödörszétvágás úgy, mint az el ˝obb, mert most már d0<dmindenhol az újd-vel.

törlés:keresés, aztán pedig törlés a vödörb ˝ol; ha ett ˝ol olyan helyzet áll el ˝o, hogy a vödör összevonható a párjával(ahol az els ˝od01bit egyezik, de ad0-edik más),akkor összevonás(két mutató ugyanoda fog mutatni) ésd0csökkentése eggyel.Ha minden d0<d,akkord-t is csökkentjük eggyel.

A fentiek miatt csak akkor mutathat két mutató ugyanarra ad0lokális mélység ˝u vödörre, ha a két megfelel ˝o érték els ˝od0bitje megegyezik.

Példa

Növelhet ˝o hash segítségével akarjuk tárolni az adatainkat.Feltesszük, hogy egy lapra két rekord fér.A hash függvény 4 bites számot ad vissza, de jelenleg még csak egy bitet használunk (d=1), mivel eddig csak három elem (0001, 1001, 1100) van a táblázatban (az egyszer ˝uség kedvéért az elemek helyett azt az értéket irjuk be, amit a hash függvény visszaad).

Tehát most így néz ki a tábla, van egy bejegyzés a 0-hoz és egy az 1-hez:

0 1

0001

1001 1100

1

1 d=1

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 7/26

Ha most beszúrni szeretnénk egy olyan elemet, melyre a hash függvény az 1010 értéket adja, akkor az új tábla ilyen lesz:

0 1

0001

1001 1100

1

1 d=1

=⇒ 0

0001

1001 1 0

01 10 11

1100 2

d=2 2

1010

Mivel az 1-hez tartozó lap már betelt, ezért itt a lokális mélységet növelni kellett 1-r ˝ol 2-re(két bitet akarunk figyelembe venni), de így adértékét is növelnünk kellett.

(3)

Ha most jön egy 0010 hash-érték ˝u elem, akkor azt simán be tudjuk rakni a helyére:

0

0001

1001 1 0

01 10 11

1100 2

d=2 2

1010

=⇒

0

0001

1001 1 0

01 10

11 1010

1100 2

d=2 2

0010

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 9/26

De ha ezután olyan jön, ahol a hash függvény értéke 0110, akkor új lapot kell létrehoznunk, de adértékét nem kell növelnünk, mert elég lesz az eddig ugyanoda mutató két mutatót szétszedni és ezen új lapoknál a lokális mélységet 2-re állítani.

0

0001

1001 1 0

01 10

11 1010

1100 2

d=2 2

0010

=⇒

0

1001 0

01 10

11 1010

1100 2

2 0001 2

2

d=2

0010

0110

Ha ezután jönne egy olyan elem, aminek az értéke 00-val vagy 10-val kezd ˝odik, akkor újabb lapra lenne szükségünk, de ehhez már adértékét is növelni kellene.

A dinamikus hash értékelése

El ˝onyök:

• egy I/O m ˝uvelettel minden megvan, ha a vödörkatalógus a bels ˝o memóriában van

• a struktúra igazodik az állomány növekedéséhez Bajok:

• szerencsétlen esetben nagyon nagy vödörkatalógust kell építeni kevés rekord miatt (legrosszabb esetben lényegében a szekvenciális keresést kapjuk vissza)

• ah(K)értéket se lehet a végtelenségig továbbszámolni:hah(K)már teljes hosszáig kiszámolandó, akkor nem lehet tovább növelni a struktúrát

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 11/26

Indexek

Másik technika adatok jó tárolására. Továbbra is az a cél, hogy a m ˝uveletek gyorsan menjenek.

Motiváló ötlet:

• könyvtárban úgy keresünk, hogy katalóguscetlik között keresünk és az alapján már megvan a könyv(s ˝ur ˝u indexre motiváció)

• ha a polcokon ábécé szerint vannak sorban a könyvek, akkor a polcok elején álló könyvek megvizsgálásával gyorsan eldönthet ˝o, hogy melyiken kell keresni(ritka indexre motiváció)

Indexek általános jellemz ˝oi:

• rendezettséget figyelembe veszi(ellentétben a hash-sel)

• van korlát a legrosszabb esetre is(ellentétben a hash-el, ami viszont átlagosan jobb)

• jól bírja a dinamikus b ˝ovülést(ellentétben a hash-el)

• kulcs rendezett halmazból kerül ki(de nem féltétlenül egyedi)

• lehet ugyanarra az állományra több index is készítve

(4)

Az indexstruktúra vázlatos felépítése

indexállomány

FÕÁLLOMÁNY

Az indexállományban vannak a keresést segít ˝o infók, a f ˝oállományban vannak a tárolt adatok, a rekordok.

A f ˝oállomány lehet esetleg rendezett a keresési kulcs szerint, de nem feltétlenül az.

Az indexállományban indexrekordok vannak, ezek felépítése:

mutató kulcs

A kulcs valamelyik f ˝oállománybeli rekordhoz tartozó kulcsérték, a mutató pedig a f ˝oállományba mutat, oda, ahol ez a rekord van.

Aszerint, hogy minden f ˝oállománybeli rekordra van rá mutató indexbejegyzés vagy pedig csak néhányra, s ˝ur ˝u illetve ritka indexr ˝ol beszélhetünk. (Majd látjuk, hogy ez két nagyon más helyzet lesz.)

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 13/26

Ritka index, egyszint ˝ u

Feltesszük, hogy a f ˝oállomány szabad, azaz elmozgathatók a rekordok szabadon.

Jellemz ˝ok:

• motiváló példa:telefonkönyv vagy szótár sarkaiban a bejegyzések, ez alapján keresés

• ritka index, azaz nem minden f ˝oállománybeli rekordra van indexbejegyzés, csak blokkonként egyre

• a f ˝oállomány vagy rendezett a keresési kulcs szerint vagy lényegében rendezett (blokkokon belül esetleg nem rendezettek a rekordok, de a blokkok egymáshoz képest rendezetten vannak)

• az indexállomány rendezett a keresési kulcs szerint(az indexállomány is háttértéron van)

• az indexbejegyzésben szerepl ˝o kulcs a rendezett esetben a blokk legels ˝o kulcsa, a lényegében rendezett esetben a blokk legkisebb kulcsa

• a mutató az indexbejegyzésben arra a blokkra mutat, ahol a bejegyzésben szerepl ˝o kulcshoz tartozó rekord van

A fentiek miatt a ritka index kivonata lesz a f ˝oállománynak, tartalmazza rendezetten a blokkok legkisebb kulcsait.

Keresés

Adott a keresési kulcs értéke, meg kell találni az ilyen rekordokat.

1. El ˝oször az indexállományban megkeressük azt a legnagyobb indexbejegyzést, aminek kulcsa még éppen nem nagyobb, mint az adott keresési érték.Ez átlagosann2I/O m ˝uvelet, hanblokkból áll az indexállomány.

2. Az el ˝obb megtalált indexbejegyzéshez tartozó blokkban(plusz egy I/O m ˝uvelet) megkeressük a rekordunkat.

Megjegyzések:

1. Ha van valami plusz struktúra, ami segíti a gyors keresést az indexállományban, akkor jobbat is lehet, mintn2.

2. A blokkon belül, a f ˝oállományban már bárhogy kereshetünk, de leginkább szekvenciálisan megy.

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 15/26

További m ˝ uveletek

beszúrás:el ˝oször egy keresés(hol kellene lennie), aztán blokkon belül a helyére tesszük:

? ha rendezett a f ˝oállomány:blokkon belül megkeressük a helyét, beillesztjük;ha nem fér be =⇒blokkvágás két egyenl ˝o részre, az új blokk minimális (legels ˝o) kulcsára

indexbejegyzés beszúrása az indexállományba

? ha lényegében rendezett a f ˝oállomány:ha van még hely a blokkban, akkor berakjuk, mindegy, hogy hova;ha nem fér be =⇒blokkvágás két részre, mindkét részben a minimális elemhez új indexbejegyzés és a régi törlése az indexállományból

törlés:hasonlóan, mint a beszúrás, el ˝oször keresés, aztán törlés a blokkból;

ha épp a minimális rekordot töröltem a blokkból =⇒indexbejegyzés módosítása ha nagyon ritkák a blokkok =⇒esetleg lapösszevonás (és persze az indexállomány módosítása is ilyenkor), de általában nem érdemes

tól-ig: valahonnan valameddig terjed ˝o érték ˝u rekordok keresése:a “tól” érték keresése, aztán a f ˝oállomány végigolvasása az “ig” értékig (a f ˝oállomány folyamatos elérése megoldott)

módosítás:ha kulcsot nem érint:keresés, átírás;ha kulcsot is érint:törlés, beszúrás

(5)

Megjegyzések:

• Tényleg használtuk, hogy a f ˝oállomány szabad (pakolgattuk a rekordokat össze-vissza).

Lesz majd technika, amivel elérhet ˝o lesz, hogy a f ˝oállomány szabadnak látszódjon.

• Azt is er ˝osen kihasználtuk, hogy (lényegében) rendezett a f ˝oállomány.

• Azért hasznos az indexállomány, mert sokkal kisebb, mint a f ˝oállomány, könnyebb benne keresniés a végen csak plusz egy I/O m ˝uvelet kell a befejezéshez.De ennek ára van:

karban kell tartani plusz egy struktúrát.

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 17/26

Többszintes ritka index

Az indexen belül keresni arányos az indexállomány blokkjainak számával. Ez jóval kisebb, mint a f ˝oállomány lapszáma, de még mindig nagyon nagy lehet.

Ezért:többszint ˝u index, vagyis index az indexre:

FÕÁLLOMÁNY ritka index ritka index a ritka indexre

• a fels ˝o index még kisebb lesz, könnyebb lesz benne keresni

• a középs ˝o szint egyszerre indexe a f ˝oállománynak és “f ˝oállománya” a fels ˝o indexnek

• keresés:a legfels ˝o szinten megkeressük a legnagyobb olyan bejegyzést, ami még kisebb a keresettnél és innen két lap beolvasásával(a megfelel ˝o középs ˝o szint ˝u indexlap és aztán a f ˝oállomány megfelel ˝o lapja)megvan a keresett rekord

• a többi m ˝uvelet hasonlóan megy(persze, ha módosul a f ˝oállomány, akkor esetleg mindegyik indexállományt is módosítani kell)

• eggyel több szint lesz, azaz eggyel több lapelérés kell a kezdeti keresés után, de a kezdeti keresés lerövidül

• nem csak kétszint ˝u lehet a ritka index, hanem több is =⇒dinamikusan is változhat=⇒B-fa

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 19/26

B-fa

A ma ismert egyik legjobb és legelterjedtebb megoldás,melágazásosB-fa vagyBm-fa, lényegében ahogy algelb ˝ol tanultuk:

• a fa levelei:a f ˝oállomány blokkjai

• a f ˝oállomány(a levelek)rendezett a keresési kulcs szerint

• minden levél ugyanolyan messze van a gyökért ˝ol

• a fa bels ˝o csúcsai:a különböz ˝o szint ˝u indexek lapjai

• egy csúcs gyerekei:az indexlapon lev ˝o mutatóknak megfelel ˝o eggyel lejjebb lev ˝o indexlapok(illetve alul levelek)

m:egy lapramindexrekord fér rá(kicsit más lesz egy bels ˝o csúcs szerkezete, mint algelb ˝ol volt)

• minden lap legalább félig kitöltött, kivéve esetleg a gyökeret(minden csúcsnak legalábbm2 gyereke van, kivéve esetleg a gyökeret)

FÕÁLLOMÁNY INDEXPIRAMIS

(6)

M ˝ uveletek

keresés:ahogy algelb ˝ol volt, a csúcsokban található kulcs-bejegyzések és mutatók mentén; arányos a fa magasságával, amiO(logmn), hanblokkja van a f ˝oállománynak

beszúrás:ahogy algelb ˝ol volt, beszúrás után esetleg csúcsvágás(ok), de max.O(logmn)

törlés:ahogy algelb ˝ol volt, törlés után esetleg csúcsösszevonás(ok), de max.O(logmn)

Megjegyzések:

1. Hamnagy=⇒ritkán kell csúcsvágás/csúcsösszevonás.

2. általábanmúgy van választva, hogy a fa magassága max. 4 legyen, ha az els ˝o lap a bels ˝o memóriában van, akkor elég 3 I/O m ˝uvelet mindenhez

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 21/26

S ˝ ur ˝ u index

Eddig feltettük, hogy a f ˝oállomány szabad és (lényegében) rendezett a keresési kulcs szerint.

Hogyan érjük ezt el? Hogyan lehet több kulcs szerint is keresni?

Erre megoldás a s ˝ur ˝u index:

• a f ˝oállomány minden rekordjához van egy indexbejegyzés =⇒ugyanannyi bejegyzés lesz a s ˝ur ˝u indexben, mint ahány rekord van a f ˝oállományban, csak persze kisebbek a bejegyzések =⇒s ˝ur ˝u index = f ˝oállomány kicsiben

• ez nem önálló állományszervezési technika(ellentétben a ritka index változataival), hanem csak kiegészítés, ami lehet ˝ové teszi, hogy a f ˝oállományt szabadnak és rendezettnek tételezhessük fel

Haszna:

• szabaddá teszi a rekordokat(a f ˝oállomány ugyan kötött, de a s ˝ur ˝u index bejegyzései szabadon mozgathatók: építhet ˝o rá ritka index)

• rendezettnek mutatja a f ˝oállományt:a s ˝ur ˝u indexet úgy rendezzük, ahogy akarjuk

• sokkal kisebb, mint a f ˝oállomány, mégis egy az egyben megfelel neki

Tipikus használata:

sûrû index ritka index

FÕÁLLOMÁNY

A s ˝ur ˝u index ráépül a f ˝oállományra, erre építjük a valódi állományszervezést. A s ˝ur ˝u index miatt a f ˝oállomány szabadnak és rendezettnek t ˝unik.

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 23/26

M ˝ uveletek ebben a struktúrában

Úgy dolgozunk, mintha a s ˝ur ˝u index lenne a f ˝oállomány, innen már csak egy plusz lapelérés a valódi f ˝oállomány.

keresés:keresés s ˝ur ˝uben, onnan egy lapelérés

beszúrás:beszúrás s ˝ur ˝ube, aztán valahova berakjuk a f ˝oállományba

törlés: keresés, törlés a f ˝oállományból, törlés a s ˝ur ˝ub ˝ol is

Hátrány

• plusz egy lapelérés kell a s ˝ur ˝u miatt

• karban kell tartani a s ˝ur ˝u indexet is mindig, amikor a f ˝oállomány változik

(7)

Nagy el ˝onye a s ˝ur ˝u indexnek

Lehet ˝ové teszi, hogy egy f ˝oállományra több különböz ˝o kulcs szerint is legyen index:

ritka index

1. sûrû index 2. sûrû index ritka index

FÕÁLLOMÁNY

Itt minden s ˝ur ˝u index rendezett a megfelel ˝o kulcs szerint és persze ha változik a f ˝oállomány, akkor mindegyik s ˝ur ˝ut is változtatni kell.

Példa:

A Személy(név, telefonszám, személyiszám, ...) sémában a személyiszám az els ˝odleges kulcs, ezért a rendszer eszerint rendezetten tárolja az adatokat és erre biztosan létre is hoz valami keresési struktúrát.

De ha mi szeretnénk a név-re is:kell egy s ˝ur ˝u index: invertált állomány.

ADATBÁZISOK ELMÉLETE19.EL ˝OADÁS 25/26

Különböz ˝ o technikák összevetése

hash:konstans(gyakran 1)lapelérés átlagosan, de legrosszabb esetben lassú

ritka index:korlátos viselkedés legrosszabb esetben is, dinamikus b ˝ovülés támogatása, rendezettség figyelembe vétele;B-fa esetén a gyakorlatban konstans lapelérés

s ˝ur ˝u index:önmagában nem jó, csak kiegészítésül szolgál

Számolási példa

Egy állományt s ˝ur ˝u index, majd erre épített1-szintes ritka index segítségével szeretnénk tárolni. Adjon értelmes alsó becslést a szükséges lapok számára az alábbi feltételek mellett:

• az állomány3·106rekordból áll,

• egy rekord hossza300Byte,

• egy lap mérete1000Byte,

• a kulcshossz45Byte,

• egy mutató hossza5Byte.

Megoldás:

A f ˝oállományban3·106rekord van, mivel rekordok nem lóghatnak át laphatáron, ezért ehhez kell106lap.

A s ˝ur ˝u indexben annyi bejegyzés lesz, mint ahány rekord van a f ˝oállományban, azaz3·106. Egy lapra pontosan20bejegyzés fér: ez1,5·105lap.

Ez azt is jelenti, hogy a ritka indexben lesz legalább1,5·105bejegyzés, ehhez kell még 7,5·103lap.

Ez összesen1 157 500lap.

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Cél: Adott (R, F) sémából anomáliát nem tartalmazó olyan felbontás el ˝oállítása, amib ˝ol ugyanaz az információ nyerhet ˝o, mint az eredetib

Ez BCNF, de mégis redundáns, mert ha valamelyik tárgynál szerepel egy gyereknév, akkor az összes többinél is szerepelnie kell. beszúrni nehéz, mert amikor egy sort

Azok, amik csak véletlenül, csak egy pillanatban állnak fenn = ⇒ eseti függés (ezek nem érdekelnek, például lehetséges hogy egy adott pillanatban minden ár csak egyszer

• relációs algebra (LEAP, letölthet ˝o, SIGMOD-ról link), ISBL nehezen emészthet ˝obb, algebrai alapú; ez volt: láttuk, hogy relációs algebrával jól meg lehet adni

Ha a figyelmeztet ˝o zármodellben, egy legális ütemezésben minden tranzakció követi a figyelmeztet ˝o protokollt, akkor az ütemezés sorosítható és soha nem lesz egyszerre

• relációs algebra (LEAP, letölthet ˝o, SIGMOD-ról link), ISBL nehezen emészthet ˝obb, algebrai alapú; ez volt: láttuk, hogy relációs algebrával jól meg lehet

• relációs algebra (LEAP, letölthet ˝o, SIGMOD-ról link), ISBL nehezen emészthet ˝obb, algebrai alapú; ez volt: láttuk, hogy relációs algebrával jól meg lehet

Itt minden s ˝ur ˝u index rendezett a megfelel ˝o kulcs szerint és persze ha változik a f ˝oállomány, akkor mindegyik s ˝ur ˝ut is változtatni