Adatbázisok 9. előadás Tikk Domonkos
Fastruktúra alapú indexek
Hashing – Emlékeztető Hash indexek egyenlőségi reláció kezelésére jók. Nem támogatják az intervallum alapú kereséseket. 2
Fa struktúrára épülő indexek Fa struktúrára épülő indexek egyaránt támogatják az egyenlőségi reláció és az intervallum alapú kereséseket. ISAM (indexed sequential access method, indexszekvenciális hozzáférési módszer): statikus struktúra – az adatok a fa levelein (levéllap) találhatók, valamint túlcsordulási lapokon) B-fa és B+-fa: dinamikus, beszúráskor és törléskor úgy módosul, hogy a kiegyensúlyozottság megmaradjon 2
Intervallum keresések Kik azok a dolgozók, kiknek fizetése > 2000 Ha az adatot rendezett fájlban tároljuk, akkor egy bináris keresést kell végrehajtani, megtalálni az első illeszkedő dolgozót, majd onnan visszaadni az összeset. A bináris keresés költsége nagy lehet (karbantartás) Alapötlet: Készítsünk indexfájlt k1 k2 kN indexfájl Page 1 Page 2 Page 3 adatfájl Page N 3
ISAM index bejegyzés P K P K P K P 1 1 2 2 m m Az indexfájl így is elég nagy lehet – de ha ismételten alkalmazzuk az eljárást, akkor egy fát építhetünk Köztes csomó- pontok Levél- lapok Túlcsordulási lap Elsődleges lapok A levéllapok tartalmazzák az adatot; jelölése *-gal 4
ISAM index létrehozása Levéllapok (adat) Fájl létrehozása: Levéllapok allokálása szekvenciálisan, kulcs szerint rendezve; indexlapok allokálása, majd túlcsordulási lapoké. Indexbejegyzések: <kulcsérték, lap azonosító>; a megfelelő levéllapra mutatnak, ahol az adat található. Keresés: Kezdés a gyökérnél; a kulcsokkal való összehasonlítás alapján a levéllapok felé. Költség: log 𝑛 𝑁 ; ahol 𝑛 = fa rendje (# adat/indexlap), 𝑁 = # levéllap Beszúrás: Levéllap megkeresése és beszúrása. Törlés: Keresés, majd levéllapról törlés. Ha túlcsordulási lap üres lesz, törölni. Indexlapok Túlcsordulási lapok Statikus fa struktúra: beszúrás és törlés csak a levéllapokat érinti. 5
Példa: ISAM Gyökér 10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97* 20
Beszúrás: 23*, 48*, 41*, 42* ... 40 20 33 51 63 10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97* 23* 48* 41* 42* 7
Törlés: 42*, 51*, 97* 8
B-fa
Bináris fák maximum 2 gyerek Keresés: log2N – ha a bináris fa kiegyensúlyozott, azaz „elegendően szimmetrikus”
Keresés kiegyensúlyozatlan esetben Átlagos keresési idő: N/2 Kiegyensúlyozottá tétel költséges biztosítani beszúrás törlés
B-fák R. Bayer után elnevezve (1970) Alapstruktúra (𝑛,𝑚)-rendű B-fa n a B-fa rendje a fa ún. lapokból áll egy lapon mutatók (𝑝𝑖) és kulcsok (𝑘𝑖) vannak mutatók és a rendezettség pi mutató olyan lapra mutat, ahol kulcsok ( 𝑘 𝑖 , 𝑘 𝑖+1 )-ben levéllap esetén: 𝑝𝑖 = NIL (𝑛,𝑚)-rendű B-fa minimum és maximum tételek egy lapon
B-fa tulajdonságai Minden lap legfeljebb 2𝑛 tételt tartalmaz Minden lapon – kivéve gyökér – min. 𝑛 tétel van Ha egy lapon 𝑚 tétel van akkor vagy levéllap vagy 𝑚+1 gyereke van Minden levéllap ugyanazon a szinten van
Keresés B-fában Keresés átlagos lépésszáma a laphivatkozások számától függ 𝑁 elem és 𝑛-ed rendű fában log 𝑛 𝑁 𝑅 elem keresése, angol ábécé mássalhangzóiban
Példa: másodrendű B-fa
Műveletek B-fákon Beszúrás levéllapra beszúrni ha a tételek száma > 2𝑛, akkor a középső elemet kiemeljük eggyel magasabb szintre 2 új 𝑛-elemű lapot hozunk létre Mindezt rekurzívan Ha a gyökérlapig feljutunk, akkor új gyökérlap, és nő a fa magassága
Példa beszúrásra új elem: 22 a levéllap telített középső elem kiemel és felterjeszt lap 2 részre
Példa beszúrásra (2)
Kulcs törlése (1) Ha levélen van, és nem minimális számú, akkor törölhető F törlése
Kulcs törlése (2) Ha belső csomópont van, akkor a megelőzője lesz felmozgatva a helyére, ha van elég tétel a lapon M törlése, helyett L kerül fel
Kulcs törlése (3) Ha belső csomópont van, de a megelőzője nem mozgatható fel (nincs elég a lapon) törlendő elem lenyomása (G -> DEGJK) G törlése
Kulcs törlése (4) Fent min. a fa Összevonás Gyökér üres lesz P C L T X Fent min. a fa Összevonás Gyökér üres lesz fa mérete csökken A B D E J K N O Q R S U V Y Z Delete D (Case 3.B) C L P T X A B E J K N O Q R S U V Y Z
Kulcs törlése (5) C L P T X A B E J K N O Q R S U V Y Z Case 0
Kulcs törlése (6) B helyére C C helyére E C L P T X A B E J K N O Q R S U V Y Z Delete B (Case 3.A) E L P T X A C J K N O Q R S U V Y Z
Kulcs törlése (7) ld. animáció http://www.csanimated.com/animation.php?t=B- tree
B+-fák Gyakorlatban ezt használják az indexállományok készítésére Az adatok mind a levéllapokon vannak, ezért a közbülső lapok és a levéllapok struktúrája eltérő