XI. ERDÉLYI TUDOMÁNYOS DIÁKKÖRI KONFERENCIA KOLOZSVÁR, MÁJUS 23-24 OBJEKTUM-ORIENTÁLT ADATBÁZIS RENDSZEREK INDEXELÉSE Irányító tanár: Dr. Varga Vorca, Docens Babes-Bolya Tudományegyetem, Matematka és Informatka Kar, Informatka Rendszerek Tanszék Szerző: Smon Anna Babes-Bolya Tudományegyetem Matematka és Informatka Kar Matematka és Informatka Szak IV. Évfolyam Kolozsvár 2008 1
Tartalomjegyzék 1 Objektum-orentált adatbázsok. 3 2 Index Állományok...6 2.1 B+ fa... 6 2.2 CH-fa 11 2.3 HcC-fa..12 2.4 H-fa...17 3 Implementálás és következtetések 2
1. Objektum-orentált adatbázsok Az objektum-orentált adatbázs rendszerek a valós vlág természetes ábrázolásának és mntázásának szükségletéből fejlődtek k. Mnden enttás egy objektumként van ábrázolva, melynek állapota és vselkedésmódja van. A CAD (computer aded desgn, számítógéppel segített tervezés) és a CASE (Computer Aded Software Engneerng, számítógéppel segített szoftvertervezés) szoftver mplementálók az 1980-as évek végén észrevették, hogy a relácós adatbázsok nem felelnek meg az elvárásaknak. A relácós adatbázsok úgynevezett üzlet adatok (busness data) feldolgozására vannak tervezve, és nem támogatják a komplex adatokat és kapcsolatokat. Innen kndulva a CAD és CASE mplementálók konferencákat tartottak és tudományos ckkeket publkáltak, elmagyarázva, hogy mért lenne szükségük egy új, objektum-orentált modellre alapuló adatbázsra. Az eredmény olyan skeres lett, hogy pár évvel ezelőtt az parág megfgyelők azt jósolták, hogy az objektum-orentált adatbázsok (OOAB) át fogják venn a relácós adatbázsok helyét. Ez a jóslás nem teljesült, ezért sokan arra következtettek, hogy az OOAB rendszerek megbuktak. Az Object Desgn (az 1990-es évek egyk vezető cége az OOAB rendszerek körébe,) egyk alapítója, Dan Wenreb szernt [3] az OOAB mplementálók azzal a céllal hozták létre ezt az új típusú adatbázst, hogy azok a rendszerek használhassák, akknek nem megfelelő a relácós és nem azért, hogy átvegye a vezetést a relácós adatbázsoktól és a fent említett állítás csupán marketngfogás volt. Szernte az OOAB rendszerek elérték a céljukat. Az OOAB-nak kalakult egy stabl típusú pac szegmens, de sorolva a számítógépes grafka, mesterséges ntellgenca, térképészet, gyógyszerészet, távközlés, multméda és sok más rendszert. Ez a pac szegmens évről évre 30-40% nő. Az objektum-orentált adatbázsok egyk erős pontja a tárolásban áll: képes tároln bármlyen komplex objektumot teljes egészében, míg a relácós adatbázsban rendszerek szétszedk az adatot, hogy az alkalmas legyen táblákba való tárolásra, és újra összerakják a feldolgozásnál. Annak ellenére, hogy ez nagy előnyt jelent az objektum-orentált adatbázsok számára, az adatok lekérdezése lletve frssítése még mndg jobb optmalzálásra vár. 3
A lekérdezés és frssítés gyorsasága nagymértékben az ndexelés technkákon alapszk. Az objektum-orentált modell új tulajdonságokkal járult hozzá az adatbázs fogalmához, ezért a hagyományos ndexelés technkák nem teljesítenek jól mnden körülmények között. Például a relácós adatbázsok körében gen népszerű B+ fa nem teljesít megfelelően az OOAB-okban. Az objektumorentált adatbázsok öröklődés támogatása nagyon hasznos azon rendszerek számára, melyek gen komplex adatok feldolgozásával foglalkoznak. Vszont ez a tulajdonság plusz követelményeket s bevezet az ndexelés technkákba. Egy adott osztály példánya az apa osztály példányát s jelent egyben, ezért nem mndegy, hogy csak az apa osztály példánya között keresünk vagy leszármazott osztályanak példánya között s. A keresést két osztályra osztjuk: Osztály-keresés ha egy adott osztály példánya között keresünk. Herarcha-keresés ha egy teljes vagy részleges osztály herarchában szereplő osztályok példánya között keresés. Ennek következményeként, egy ndexnek két célt kell elérne: Hatékony osztály-keresést. Hatékony herarcha-keresést. Használhatnánk B+ fát, de ez azt jelentené, hogy herarchkus keresés esetén, a keresésben szereplő, mnden osztálynak megfelelő B+ fát át kéne vzsgáln. Teljesítménytanulmányozások kmutatták, hogy egy ndex egy teljes osztály herarchára jobban teljesít, mnt egy-egy ndex mnden osztályra a herarchából. A következőkben bemutatok három különböző ndexelés technkát, amelyből egyet mplementálok és tesztelek. Az ndexelés technkák jobb megértése érdekében, bemutatom a B+ fát, valamnt számunkra releváns műveletet. De először lássunk egy példát, melyre hvatkozunk majd a dokumentum több részeből. Legyen egy egyetem alkalmazottanak vázlatos objektum- orentált adatbázsa. Az Alkalmazottak osztálybók kettő másk öröklődk: Akadémkus és Admnsztratív osztályok. Az Admnsztratív osztállyal nem foglalkozunk. Az akadémkusok között lehetnek kutatók, doktorandusok és vezető tanácstagok s. Legyenek az Alkalmazottak osztály változó: AlkalmazottId, Név lletve Fzetés. 4
1. Ábra. Alkalmazottak adatbázsa Osztály-keresés: Adjuk meg az összes vezető tanácstag nevét. Vagy adjuk meg az összes olyan akadémkus nevét, akk nem tartoznak a vezető tanácsba, nem kutatók és nem doktorandusok. Herarcha-keresés: Adjuk meg az összes akadémkus nevét, melynek fzetése kevesebb, mnt 2000 új lej. 5
2. Index Állományok 2.1 B+ fa B+ fa egy olyan fa szerkezetű adatállomány, mely bztosítja az adatok gyors vsszakeresését. A B+ fa csomópontokból áll, melyek specáls esete a gyökér valamnt a levelek. Mnden kulcs megtalálható a rendezve a levelekben, míg a belső csomópontokban szereplő értékek rányításra használhatóak a keresés algortmusban. A B+ fa rendje, melyet d vel jelölünk, a fa csomópontjanak a kapactását jellemz. Ha a fa rendje d akkor, egy csomópont mnmum d és maxmum 2xd értéket tartalmazhat. A B+ fa szerkezet követelménye: Mnden út a gyökértől a levélg egyforma hosszúságú Mnden csomópont, am nem gyökér vagy levél, legalább d+1 és legfeljebb 2xd+1 gyerekre mutat A levél tartalmaz legalább d és legfeljebb 2xd érteket Specáls esetek: - ha a gyökér nem levél, legalább 2 gyerekre mutat - ha a gyökér levél s egyben, akkor legfeljebb d érteket tartalmazhat Egy tpkus csomópont szerkezete: K - a keresés - kulcs értéke P mutatok A keresés kulcsok értéke rendezett sorrendben találhatok mndegyk típusú csomópontban. Belső csomópontok eseten, a mutatok a gyerek csomópontokra mutatnak. A gyerekekre való 6
mutatás oly módon történk, hogy a P mutató alatt alfa kzárólag olyan retekeket tartalmaz, melyek ksebbek, mnt K, valamnt a 1 P + mutató alatt alfa kzárólag nagyobb vagy egyenlő értékeket tartalmaz, mnt K. Levelek esetében, a P, = 1, n 1 mutatók rekordokra mutatnak, melyek azon objektumok azonosítót tartalmazzak, melyek ndexelt változónak értéke megegyeznek a K értekkel. A P n mutató pedg a következő levélre mutat. 2. Ábra. B+ fa példa Műveletek a B+ fában: Keresés (k) - Olyan objektum azonosító keresése, mely k értékű ndexelt változóval rendelkezk, egy d rendű fában 1. Kezdjük a gyökérrel 1. 1 Megkeressük azt a legksebb K értéket, amelyre k < K 1. 2 Ha létezk lyen érték, akkor átugrunk a P segítségével a megfelelő gyerek csomópontra 7
1. 3 Ha nem létezk lyen érték és a csomópontban m darab mutató található, akkor a P m mutatót követjük 2. Ha fent azonosított mutatót követve elért csomópont nem levél, akkor az első pontban felsorolt lépéseket smételjük 3. Különben, az elért csomópont levél. Ekkor: 3.1 Ha létezk olyan, amelyre K = k, követjük P mutatót a keresett rekordra, ahol találhatóak a keresett azonosítok 3.2 Különben nem léteznek keresett típusú objektumok. Beszúrás (od, k) - Olyan objektum azonosító beszúrása, amelynek ndexelt változója k értékű, egy d rendű fába 1. A fent lert algortmussal, megkeressük azt a levelet, amelyben a k értéknek meg kell jelenjen 2. Ha : K = k, akkor az od objektum azonosítót beszúrjuk a P által azonosított rekordba 3. Különben, két esetet különböztetünk meg 3.1 Ha van hely a levélben, azaz a levél kevesebb értéket tartalmaz, mnt 2xd, akkor beszúrjuk a levélbe a (k,p) (érték,mutató) párost, ahol az új p mutató arra az új rekordra mutat, amely jelenleg meg csak a beszúrt objektumazonosítót tartalmazza 3.2 Különben, a csomópontot ketté kell hasítan A csomópont kettéhasításának lépése: 1. Beszúrjuk a levélbe az új (érték, mutató) párost 2. Létrehozunk egy új levelet és a rég levél utolsó d+1 darab (érték, mutató) párosat áthelyezzük az új levélbe. A rég, valamnt az új levelek utolsó mutatóját megfelelően beállítjuk 8
3. Ábra. Szúrjuk be az 5-ös érteket. 3. Legyen az új levél legksebb értéke l. Ekkor a (l,p) párost beszúrjuk a rég levél apa csomópontjába, ahol p egy mutató az új levélre. Ha a csomópontba nncs hely az új párosnak, akkor kettéhasítjuk. A belső csomópont kettéhasítása abban különbözk a levél kettéhasításától, hogy a fentebb szntre küldött (érték, mutató) páros nem marad meg a csomópontban. 4. Ábra. A levelet és a csomópontot kettéhasítjuk. 9
5. Ábra. Új gyökeret hozunk létre. 4. A csomópontok hasítása addg smétlődk, amíg nem jutunk el egy olyan csomóponthoz, amely nncs tel. Ha lyen csomópont nem létezk, akkor új gyökeret hozunk létre, amely tartalmazn fogja a (p1, k, p2) elemeket, ahol p1 mutat a rég csomópontra és p2 pedg a hasítás során létrehozott új csomópontra. A 3, 4, 5 ábrák szemléltetk a beszúrás lépéset. A következőkben tárgyalt ndexelés technkák ez az algortmus alapján végzk a beszúrást. Következtetések: A B+ fák mndg egyensúlyozott magasságúak. Mnden beszúrásnak és törlésnél a B+ fa lokálsan újra rendez magát. Ez poztív jellemző, mert nem szükséges perodkus átrendezés a teljesítmény megőrzése érdekében. Vszont ugyanakkor a szükségesnél több beszúrást, lletve törlést gényelnek a fent említett műveletek. Általában a fa rendje úgy van megválasztva, hogy egy csomópont betöltsön egy lemez blokkot, am tpkusan d=100. Gyakorlatban egy csomópont átlagosan 67% - ban foglalt, am d=100 eseten azt jelent, hogy egy csomópontnak 133 gyereke van. 10
Egy lyen tulajdonságokkal rendelkező 4 szntes fa képes tároln, pontosan, 312,900,700 különböző értéket. 4 133 = A B+ fa csomópontjanak nagy tarolás kapactásának köszönhetően a fa magassága általában kcs, ezért mnmalzálva vannak a lemezolvasás műveletek. A B+ fa hatékonyan támogatja az egyenlőség, lletve az ntervallumkeresést. Egy beszúrás, lletve törlés a B+ fában O ( Log N ) műveletet jelent, ahol F az átlagos gyerekek számát egy csomópontra, a N pedg a levelek számát jelent. F 2.2 CH-Fa B+ fára alapozva az első ajánlott módszer a CH-fa (class herarchy tree), am fgyelembe vesz az osztályok öröklődését és egy ndexet tart fent a teljes osztály herarchára. A belső csomópontjanak szerkezete megegyezk a B+ fa belső csomópontjanak szerkezetével, vszont a levél szerkezete már különbözk. A levelek tároljak a megadott osztály herarcha összes olyan objektumanak az azonosítót. A levél szerkezete: 6.Ábra CH fa levél szerkezete. K a kulcsértékek 11
Kulcs könyvtár (Key drectory) tartalmazza mnden osztályra a megfelelő osztály példánya azonosítónak a kezdet pozícóját. A CH-fa egyformán kezel az osztály-keresést, valamnt a herarcha-keresést és vszonylag egyszerűnek tűnk. A hátránya az, hogy túl sok felesleges adatot kell, hogy átszűrjön kmondottan, ha a herarcha osztály alsó szntjen található osztály példánya között keresünk. A másk hátránya az, hogy nem ábrázolja az öröklődés struktúrát természetesen. A keresés és beszúrás algortmusa hasonlóak a B+ fa keresés és beszúrás algortmusahoz. 2.3 HcC-Fa A HcC fa egy olyan fa szerkezetű ndex, amely fgyelembe vesz az osztályok herarcháját. Szerkezete B+ fa szerkezetéhez hasonló. Kétféle láncot használ az nformácó tarolására: Osztály lánc Osztály-herarcha lánc Háromféle csomópontból épül fel: Belső csomópont Levél Od (objektumazonosító) csomópont A Fa első szntjeben tálalhatóak a belső csomópontok, ezek után következve egy sznt levél, majd az od csomópontok több szntben, ahogy ez az -k ábrán látható. A felsorolt csomópont típusokat, lletve a lánc típusokat a következőkben részletesen tárgyaljuk. Az egyszerűség kedvéért feltételezzük, hogy adott egy osztály herarcha mely n darab osztályból épül fel. 12
Az od csomópontok szerkezete: Az od csomópontok, ahogy mar láttuk, fa alsó részét képezk és n+1 darab láncba vannak szétosztva. Mnden osztálynak az osztály herarchából megfelel egy-egy osztály lánc, míg az utolsó sznten tálalható herarcha lánc, ahogy azt a neve s sugallja, a teljes herarchának felel meg. Az osztály láncban tálalható od csomópontok szerkezete enyhen különbözk a herarcha láncban tálalható od csomópontok szerkezetétől. Az osztály láncbel od csomópontok kzárólag olyan objektum azonosítókat tartalmaznak, melyek az osztály láncnak megfelelő osztályból származnak és ndexelt változójuknak értéke megegyezk a kulcs értékkel. Egy osztály láncbel od csomópont egy bemenetele a következő szerkezetű: < kulcs érték, od lsta > A herarcha láncbel od csomópontok, melyek a fa utolsó szntjét képezk, olyan objektumazonosítókat tartalmaznak, melyeknek ndexelt változójuknak értéke megegyezk a kulcs értékkel, függetlenül attól, hogy melyk osztálynak a példánya. Egy lyen od csomópont a kulcs érték mellett n darab od lstát tartalmaz, melyek mndegyke egy-egy osztálynak felel meg, azaz egy adott osztály példányanak azonosítót tartalmazza. Egy herarcha láncbel od csomópont tpkus bemenetele: <kulcs érték, od lsta 1,.,od lsta m > Mndkét típusú láncban az od csomópontok össze vannak kötve, hogy megkönnyítse az od csomópontok között átmenetelt balról jobbra. A belső csomópont szerkezete:. A belső csomópont nagy mertekben hasonlít a B+ fa belső csomópontjához. Hasonlóan B+ fához, ha a HcC-fa rendje d, akkor egy csomópont legkevesebb d és legtöbb 2xd darab kulcsértéket tartalmazhat. A P mutatok a gyerekekre mutatnak. K kulcsértékek a keresés rányítására alkalmasak, amíg a 13
7. Ábra HcC fa belső csomópont szerkezete. A fontos különbség azonban a csomópontban megjelenő btmapek. A K kulcsérték után következő btmapban az egyk bt akkor és csaks akkor 0 értékű, ha a megfelelő osztály egyk példányának sem az ndexelt változójának érteke nem található a K 1 és kulcsértékek ntervallumában. K 8. Ábra HcC-Fa szerkezetének vázlata. 14
A levél szerkezete: 9. Ábra A HcC fa levél szerkezete. Mnden kulcsértéknek megfelel anny darab mutató, ahány 1-es érték található a btmapben, legyen ez m darab. A K érték után közvetlenül következő P, = 1, mmutató az osztály lánc j megfelelő od csomópontjara mutatnak. A K érték után közvetlenül következő P + 1 mutató a herarcha lánc egy csomópontjára, j n míg az utolsó P mutató a következő levélre mutat. A levelekben, akárcsak a belső csomópontokban a kulcsértékek rendezve találhatóak és a levelekben mndegyk kulcsérték megjelenk. A keresés: Legyen cdsearch a keresésben érdekelt osztályok halmaza és [ v, 1 v] 2 a keresés ntervalluma. A továbbakban részletezem a keresést a négy fele keresés típusra. 1. Egy osztálybel, adott értékű ndexelt változóval rendelkező objektumok keresése. v = v és cdsearch számossága 1 1 2 1.1 Megkeressük azt a levelet, mely tartalmazza a v 1 értéket, a B+ fánál bemutatott módszerrel. 1.2 Ha létezk lyen levél, akkor a K = v1 kulcs érték után található megfelelő mutató segítségével továbblépünk az adott osztályhoz rendelt osztály láncbel od csomópontra, ahol megtalálhatóak a keresett objektum azonosítok. 1.3 Ha nem létezk lyen levél, akkor a keresett típusú objektumok nem léteznek. 15
2. 2. Egy osztálybel, [ v 1, v 2 ] ntervallumba eső értékű ndexelt változóval rendelkező objektumok keresése. cd search számossága 1 2.1 Megkeressük azt a levelet, amely tartalmazza a legksebb v 1 K n kulcs értéket. 2.2 A 2.1 alpontban azonosított levélből átugrunk a megfelelő mutató segítségével az adott osztályhoz rendelt osztály lánc megfelelő od csomópontjára. Az osztály láncon tovább haladunk, amíg el nem érjük azt az od csomópontot, amely tartalmazza a legnagyobb K v2 kulcs értéket. 2.3 Ha léteznek lyen csomópontok, akkor megtálalhatóak benne a keresett objektum azonosítok. 2.4 Különben, a keresett típusú objektumok nem léteznek. m 3. Adott értékű ndexelt változójú objektumok keresése, melyek mndegyke cd search -ben található egyk osztály példánya. v = v 1 2 3.1 Megkeressük azt a levelet, amely tartalmazza a v 1 kulcs értéket. 3.2 Ha létezk lyen levél, akkor a K = v1 kulcs érték után következő n+1 - k mutató segítségével átugrunk a herarcha lánc megfelelő od csomópontjára, ahol kválasszuk a v 1 -nek, valamnt a cdsearch - bel osztályoknak megfelelő objektumazonosítókat. 3.3 Ha nem léteznek lyen csomópontok, akkor a keresett típusú objektumok nem léteznek. 4. [ v 1, v 2 ] ntervallumba eső értékű ndexelt változóval rendelkező objektumok keresése, melyek mndegyke cd search -ben található egyk osztály példánya. 4.1 Megkeressük azt a levelet, amely tartalmazza a legksebb v 1 K n kulcs értéket 16
4.2 Ha a cdsearch halmazban megtalálható az osztály herarcha mndegyk osztálya, akkor a fent azonosított levélből átugrunk a K n - nek megfelelő mutató segítségével a herarcha lánc megfelelő od csomópontjára. Innen a herarcha láncon előre haladunk, amíg el nem érjük azt az od csomópontot, amely tartalmazza K legksebb kulcs értéket, amelyre K v2. Az utón áthaladt od csomópontok m tartalmazzak a keresett objektumazonosítókat. 4.3 Különben, mnden osztályra a cd search halmazból a 2.1 alpontban bemutatott keresést alkalmazzuk. 4.4 Ha nem léteznek a 4.2, valamnt a 4.3 alpontban keresett od csomópontok, akkor a keresett típusú objektumok nem léteznek. m A keresés, bármlyen keresés típusra, korább stádumokban leállhat, ha észreveszzük, valamely belső csomópont vagy levél btmapjából, hogy az adott osztályoknak nem léteznek példánya, melyek ndexelt változónak értéke az általunk megadott ntervallumba legyenek. A beszúrás a B+ fa beszúrásához hasonlóan történk, tt vszont ügyeln kell a két lánctípus frssítésére s. 2.4 H- fa A H-fára alapuló ndexelés technka természetesen támogatja az osztály herarcha szerkezetét. Az osztály herarcha mnden osztályának megfelel egy H-fa, melyek az öröklődésnek megfelelően egymásba vannak ágyazva. A 1. Példában megadott osztály herarchát ndexeljük a Fzetés változója szernt. Ekkor a beágyazás következőképpen fog alakuln: 17
10. Ábra H-fa herarcha. Osztály-keresés: Adjuk meg az összes vezető tanácstagot, aknek a fzetése 5000 új lej felett van. Herarcha-keresés: Adjuk meg az összes akadémkust, aknek a fzetésese 1000 és 5000 új lej között van. Az osztály-keresésre adott példa esetén a H VezetőTanácsTag fát kell átjárn. Ez az ndexelés technka lehetővé tesz, hogy a H-fákat külön s kezelhessük a H-fa herarchától. Ha az L-mutatókat nem vesszük fgyelembe, akkor egy B+ fát kapunk. A herarcha-keresésre adott példa esetén, átjárjuk a teljes H Akadémkusok fát és onnan az L- mutatókon haladva tovább, átjárjuk mnden osztály egy-egy alfáját. Nem szükséges mndegyk H-fát teljesen átjárn a herarchából. Legyen N a H Apa fa, lletve a n a HGyerek fa csomópontja és a N csomópontból egy L mutató az n csomópontra mutasson. Ez azt jelent, hogy az N csomópontból elérhető az a H Gyerek fabel alfa, melynek gyökere az n csomópont. Jelentsen L(n) egy n gyökerű alfára mutató L-mutatót. 18
A helyes beágyazást bztosítják a következő szabályok: Ha N csomópontból egy L mutató n csomópontra mutat, akkor a n gyökerű alfa kulcsértékenek [mn,max] ntervalluma benne kell, hogy legyen a N csomópont kulcsértékenek [mn,max] ntervallumába, kvételt képez az az eset, ha N egyben gyökér s. Nevezzük ezt a feltételt érték bennfoglalás feltételnek. Mnden levél a H Gyerek fából elérhető kell, hogy legyen a H Apa fából. Az első szabály bztosítja, hogy a kulcsértékek helyesen rányítsak a keresést a beágyazott alfák felé. A másodk szabály bztosítja, hogy mnden kulcsérték megtalálható legyen. A H-fa hatékonyságát a következő szabályok bztosítják: Mnden levélre a H Gyerek fából létezk egy és csaks egy elérés útvonal H Apa fából. Feltételezzük, hogy n csomópont gyereke n 1,..., n k. Ha N csomópontban léteznek L( n) = 1, k L-mutatók, akkor ezeket k kell cseréln egy, L( n) L-mutatóra. A beágyazott alfa a lehető legksebb kell, hogy legyenek. Például, legyenek N,..., 1 N l a N gyereke, n,..., 1 n k a n gyereke és létezzen N csomópontban L(n) L-mutató. Ekkor, ha {1, l}, úgy hogy N csomópontba beágyazható legyen valamely n j j {1, k }, akkor behelyezzük L( n j ) L-mutatót L-mutatót L( n 1 ),, L( n j 1 ), L( n j + 1),, L(n n k ) L-mutatókra. N csomópontba és kcseréljük L(n) Az érték bennfoglalás feltételben szereplő bennfoglalás a lehető legszorosabb kell, hogy legyen. Feltételezzük, hogy N csomópontba, lletve N egyk N gyerek csomópontjába egyaránt beágyazható n csomópont. Ekkor a beágyazást csomópontba végezzük. N 19
A keresés: Három esetet különböztetünk meg, a H-fában való keresésben: 1. Ha egy adott osztály bzonyos példányat keressük. 2. Ha a gyökértől ndulunk, egy herarcha-keresésben. 3. Ha egy belső csomóponttól ndulunk, ahova egy L-mutató révén jutottunk, egy herarcha-keresésen belül. Az első esetben a H-fában ugy keresünk, mnt egy B+ fában és nem vesszük fgyelembe az L-mutatókat. A herarcha-keresés esetén, a keresés a gyökér osztálynak megfelelő H-fában kezdődk és az L-mutatókat követve keresünk, a keresés krtérumoknak megfelelő H-fákban s. Legyen n az a csomópont, ahol épp vagyunk a keresésben, [, ] amelybe az ndexelt változó értéke benne kell, hogy legyen és melyek érdekeltek a keresésben. v v pedg az ntervallum, 1 2 C ds azon osztályok halmaza Keresés algortmus: Keres ( n, v 1, v 2, Ha n levél C ds ) Mnden kulcsértékre, mely [, ] v v ntervallumba esk, követjük a megfelelő 1 2 mutatót és a talált azonosítókat hozzáadjuk a megoldáshoz. Ha max n < v 2 Akkor átugrunk a következő levélre, legyen ez n Keres( n, v 1, v 2 ) Vsszamenőleg n csomópontnak n ős csomópontján felfele Ős Követünk mnden olyan L-mutatót, melyre a beágyazott fa mnmum értéke benne van a [, ] v1 v 2 ntervallumba és amely ds C -ben szereplő Különben egyk osztálynak megfelelő H-fa egyk csomópontjára mutat 20
Ha K legksebb kulcsérték, am nagyobb, mnt v 2 Követjük P mutatót az n csomópontra Keres( n, v 1, v 2 ) Különben Követjük az utolsó mutatót n csomópontból n csomópontra Keres( n, v 1, v 2 ) Vége A beszúrás a H-fába a B+ fa beszúrás algortmusát követ, de mnden elem beszúrásánal, akár levélbe, akár belső csomópontba, frssíten kell a létező L-mutatókat vagy újat kell létrehozn. 21
3. Implementálás és Következtetések A H-fát mplementáltam C++-ban, teszteltem valós adatokra és végkövetkeztetéseket vontam le, melyeket tt bemutatok. Mnden H-fát külön bnárs fájlba tárolok. Khasználva a bnárs fájl fő jellemzőjét, mndg arra a csomópontra ugrok, amelyre szükségem van. A csomópontoknak előre meghatározott hosszuk van, azaz 4K hosszúra vannak megtervezve. A rend d maxmálsan 100 lehet, tehát egy csomópontba maxmálsan 200 elem fér el, amelyhez 201 mutató és 100 L-mutató tartozk. A csomópont osztály szerkezete: template <class T> class Node { Prvate: nt occupancy; bool leaf; T values[200]; unsgned long ponters[201]; nt nrlponters; lpontertype lponters[100]; NodePart() {};.. }; Amnt látjuk a csomópontok bármlyen típusú adatot tárolhatnak, az egyedül feltétel az, hogy az adat típusra legyen értelmezve rendezés művelet, mert az adatok a levelekben rendezve kell legyenek. A mutatókat unsgned long típus formájában mplementáltam, ezek egy memóra címet tartalmaznak, azaz a csomópont kezdő pozícójának a címe. Az occupancy és leaf változók megadják, hogy menny rész foglalt a csomópontból, lletve azt, hogy levelek-e vagy nem. Az lpontertype struktúra: struct lponter { publc: 22
}; nt mn; nt flenr; unsgned long ponter; nt max; Egy L-mutató egy H-fa egyk csomópontjára mutat. A ponter változó tartalmazza ennek a csomópontnak a kezdő pozícóját és a flenr annak a fájlnak az azonosítóját, amelyben a H-fa található. A mn és max változók tárolják a ponter által azonosított csomópont gyökerű alfa legksebb és legnagyobb értéket. Ezek azért szükségesek, hogy tudjuk érdemes-e tovább menn a kereséssel az azonosított alfába. A felépítés: Az ndex elkészítése során, először az osztály herarcha alsó szntjén található osztályokra építjük fel a H-fákat, majd felfelé haladunk és közben beágyazzuk a már meglévő H-fákat. A H-fa építése az osztály herarcha legalsó szntjén található osztályara megegyezk a B+ fa építésével. Ha egy osztálynak nncs egy példánya sem, akkor az ennek megfelelő H-fa egy gyökérből fog álln, amely tartalmazza az L-mutatókat. A beágyazás algortmusa: Beágyaz (N, n) // n gyökerű alfát akarjuk beágyazn N csomópontba Ha N nem gyökér Ha N levél akkor klép Ha mn, max n mn, max alfa n alfa N N akkor klép Ha N gyereke levelek Akkor Különben Legyen NL. k = L (n) NLaz. k N csomópontban a kővetkező L-mutató 23
Legyenek N,..., 1 N t a N csomópont gyereke Ha {1,..., t} úgy hogy Akkor Különben mn,max n mn,max alfa n alfa N N Beágyaz ( N,n) Legyenek n,..., 1 ns az n csomópont gyereke Mnden = 1, t és j = 1, s Nest( N, n) j Ha egyk n j csomópontra sem skerült a beágyazás Akkor Legyen NL. k a következő L-mutató N csomópontban Különben NL. k = L(n) Mnden olyan n j csomópontra, melyre nem skerült a beágyazás Legyen NL. k a következő L-mutató N Vége Különben Legyen NL. k = L (n) csomópontban NL. k = L( n) j NL. k a következő L-mutató N csomópontban Ha beágyazn akarjuk H Gyerek fát a H Apa fába, akkor párhuzamosan átjárjuk a két fát és megpróbáljuk az L-mutatókat a H Apa fában mnél lentebb nyomn a levelek felé. 24
Feltételezzük, hogy n csomópont H Gyerek gyökere és N csomópont H Apa gyökere. Ekkor először megpróbáljuk beágyazn n gyereket N gyerekebe. Ha ez nem skerül, akkor beágyazzuk n csomópontot N csomópontba. A keresés a 2. fejezet 3. alfejezetében leírt algortmus alapján van mplementálva. A legrosszabb esetben a H-fa ndex herarcha úgy teljesít, mntha egy-egy B+ fát tartanánk fent mnden osztályra. Ez akkor következk be, amkor a H-fa herarcha mnden L- mutatója gyökérben található és gyökérre mutat. Egy egyszerű példán keresztül megmutatom mennyre csökken a szükséges csomópont beolvasások száma H-fa ndex állomány esetén, mnt B+ fánál. 11. Ábra H-fa herarcha részleges példa. Feltételezzük, hogy életkor szernt ndexeltünk bzonyos személyeket. Kérdés: Adjuk meg az összes 5 éves személyek nevét. 25
Megoldás: A H Apa fában lemegyünk a képen látható baloldal levélre, onnan megtaláljuk a Apa osztálybel keresett objektum azonosítókat, nnen pedg az L-mutató segítségével átugrunk a H Gyerek megfelelő levelére, ahonnan szntén megtaláljuk a keresett azonosítókat. Ez összesen 4 darab csomópont beolvasását jelent. Ha H-fa ndexállomány nélkül, B+ fák segítségével akarjuk megoldan a kérdést, akkor mndkét fát külön-külön át kell járn. Ez összesen 6 darab csomópont beolvasását jelent. A csomópont beolvasások száma nem mndg ksebb a H-fa ndex technkánál, mnt a B+ fánál, vszont soha sem nagyobb. A H-fák működését kpróbáltam egy öt darab osztályból álló herarchán, melynek szerkezete megegyezk a 10 Ábrán látható szerkezettel. Az adatokat random módón választottam k a [0, 1000] ntervallumból, és mnden fába 1000 elemet szúrtam be. Végrehajtva többször a keresést, erre az eredményre jutottam: 500 keresést a H-fa ndex 4,312 másodperc alatt, a B+ fa ndex 9.703 másodperc alatt hajtott végre. Végkövetkeztetés: Ez a dolgozat nem azt akarja bzonyítan, hogy a H-fa mndenképp jobb a B+ fánál. Mndkét ndexelés technka, különböző körülmények között teljesít a legjobban. Az adatbázs tervező fel kell, hogy mérje a követelmények típusat és ennek alapján kell válasszon a különböző ndexelés technkák között. Vszont, ha az adattípusok vagy azok egy része osztály herarchát formálnak, akkor mndenképp megfelelőbb és hatékonyabb a H-fa ndexelés technkát választan. 26
Könyvészet 1. Y. Huang, J. Chen, The study of ndexng tecnques on object orented databases, 2000 2. C.C. Low, B.C. Oo, H. Lu, H-trees: a dynamc search ndex for OODB, ACM SIGMOD Internatonal Conference, 1992 3. D. Wenreb, Object-Orented Database Management Systems Succeeded, Intertnatonal Conference On Object Databases, Berln, 2008 4. H. Ullman, J. D. Wdom, J. D. Garca-Molna, Database Systems: The Complete Book, Prentce Hall, 2001 27