Hakemistotyypeistä Hakemistorakenteet R & G Chapter 10 Hakemistomerkintä sisältää hakemistoavaimen (indexing key) muodostusperustan määrittelemänä tietueesta tai tietuejoukosta tuotettu tunnus yleensä suoraan kentän arvo tietueen osoitteen, joka voi olla joko sivuosoite tai tietueen siirtely sivun sisällä helppoa riviosoite (sivuosoite + rivin (tietueen) järjestysnumero) tietueen siirtely edellyttää tietueeseen viittavien hakemistomerkintöjen muuttamista, tietue löytyy nopeammin 1 2 Hakemiston toteutuksesta Hakemiston toteutuksesta Teknisesti hakemistokin on tiedosto muodostuu sivuista (hakemistosivu) hakemistomerkinnät ovat tietueita tarvitsee käsittelyä varten puskureita koska useat tietokantahaut saattavat edellyttää hakemiston käyttöä pyrkivät tkhj:ien puskurienhallintarutiinit suosimaan hakemistosivujen säilymistä puskureissa Hakemisto voitaisiin toteuttaa aiemmin käsiteltyjen tiedostorakenteiden avulla kasa, järjestetty peräkkäistiedosto, hajautusrakenne Hakemistoja varten on kehitetty myös erityisiä hakemistokäyttöön tarkoitettuja rakenteita (esim. B+-puu, tarkastellaan myöhemmin) 3 4 1
Hakemiston käyttö Haku hakemistoa käyttäen on kaksivaiheista ensin etsitään hakemistomerkintä hakemistosivuilta ja hakemistomerkinnän perusteella haetaan tietueen sisältävä sivu Tietueen hakua varten tarvitaan siis vähintään kaksi levyhakua (elleivät sivut ole puskurissa). Hakemistotietuetta voidaan joutua etsimään usealta hakemistosivulta. Koska hakemistomerkinnät ovat yleensä lyhyempiä kuin varsinaiset tietueet, niitä mahtuu sivulle useampia ja sivuja on vähemmän. Seuraus: hakemiston kautta on nopeampi etsiä tietuetta Arvovälihaut Hae työntekijät, joiden palkka > 00 Jos tiedosto lajiteltu voidaan binäärihaulla hakea ensimmäinen ehdon täyttävä monikko. Binäärihaunkin kustannus voi olla korkea. Yksinkertainen idea: luodaan hakemisto. k1 k2 kn Hakemistotiedosto Page1 Page2 Page3 PageN Datatiedosto * Voidaan käyttää binäärihakua pieneen hakemistoon! 5 6 Harvat hakemistot - ISAM Harvat hakemistot - ISAM ISAM (indexed sequential access method) indeksoitu peräkkäisrakenne harva monitasoinen staattinen hakemisto staattinen: hakemisto pysyy luontinsa jälkeen muuttumattomana kunnes tiedosto organisoidaan uudelleen ja sille luodaan uusi hakemisto tiedosto jakautuu perussivuihin ja ylivuotosivuihin ylivuotosivuille viedään lisäykset, jotka eivät mahdu perussivuille, ylivuotosivut ketjutetaan Tiedosto luodaan järjestetyn aineiston pohjalta Tietueita lisätään tiedoston loppuun (järjestyksessä) Sivuille jätetään tilaa lisäyksille, esim. % - %. Hakemistomerkinnässä avainarvo ja sivuosoite Viedään merkintä hakemistosivulle aina kun aloitetaan uusi datasivu ensimmäisen hakemistosivun kohdalla viedään hakemisto-avaimeksi low-value = pienin mahdollinen, muille sivun ensimmäisen tietueen avain Hakemistosivut voidaan laittaa täyteen, sillä niitä ei päivitetä. 7 8 2
Harvat hakemistot - ISAM Rakenne sopii hyvin tiedostoille, joihin tulee vain vähän lisäyksiä. Jos lisäyksiä tulee runsaasti tarvitaan ajoittaisia uudelleenorganisointeja. Ylivuotoketjut hidastavat läpilukuaikaa samoin kuin järjestetyssä peräkkäisrakenteessa. Koska hakemistosivut eivät muutu, ei niitä myöskään tarvitse lukita rinnakkaisessa käsittelyssä prosessin ei tarvitse jonottaa hakemistosivua Harvat hakemistot - ISAM Poistot kun ylivuotosivu tyhjenee poiston seurauksena sivu irrotetaan ketjusta ja voidaan ottaa uudelleen käyttöön kun datasivu tyhjenee poiston seurauksena se jätetään tyhjäksi. Sivu tarjoaa tällöin lisäyspaikan, jos sen avainalueelle sattuisi tulemaan lisäyksiä. 9 10 Harvat hakemistot - ISAM Harvat hakemistot - ISAM Alkuperä: IBM.n ISAM rakenteessa oli alunperin kaksi hakemistotasoa alimpana urahakemisto (uran suurin avain), ja seuraavalla tasolla sylinterihakemisto (sylinterin suurin avain) Muunnelmia ISAM rakennetta voidaan käyttää hakemistorakenteena, siten että datatietueina eivät olekaan oikeat datatietueet vaan tiheän hakemiston hakemistomerkinnät. 11 ISAM on keskimäärin hyvin tehokas rakenne hakemistoavaimen avulla tehtävissä hakuoperaatioissa (yhtäsuuruus, alkuosa, arvoväli) Rakenne ei kykene takaamaan kasvavalle tiedostolle kovin pientä ylärajaa levyhakujen määrälle pahimmassa tapauksessa, pahin tapaus levyhakuja luokkaa: lisäysten määrä/sivukoko 12 3
hakemistotietue ISAM P 0 K 1 P 1 K 2 P 2 K m P m Esimerkki ISAM puusta Hakemistotietue voi silti olla iso, mutta ideaa voidaan toistaa! Hakemistosivut 20 33 51 63 Lehti sivut Ylivuoto sivut * Lehtisivut sisältävät tietosivuja. Pääsivut 13 10* 15* 20* 27* 33* 37* * 46* 51* 55* 63* 97* 14 Lisätään 23*, 48*, 41*, 42*...... Poistetaan 42*, 51*, 97* Hakemisto sivut 20 33 51 63 Päälehtisivut 20 33 51 63 10* 15* 20* 27* 33* 37* * 46* 51* 55* 63* 97* 10* 15* 20* 27* 33* 37* * 46* 55* 63* Ylivuoto sivut 23* 48* 41* 23* 48* 41* 42* 15 * Huomaa että 51* on hakemistotasolla mutta ei lehtitasolla! 16 4
Dynaamiset hakemistorakenteet B+ -puu B+ -puut ovat laajalti tietokantojen yhteydessä käytetty tiedostorakenne Rakenne on oikeastaan ISAM rakenteen dynaaminen muunnelma Rakenteen alimmalla tasolla ovat datatietueet järjestettynä rakenteena kuten ISAM:ssa, Datasivut eivät kuitenkaan ole välttämättä fyysisesti peräkkäisiä vaan ne on usein kytketty kaksisuuntaiseksi linkitetyksi listaksi. Erillisiä ylivuotosivuja ei ole, vaan listarakennetta ylläpidetään dynaamisesti. Datasivujen päällä on monitasoinen harva hakemisto, joka ISAM:ista poiketen on dynaaminen Esimerkki B+ -puusta Haku alkaa juuresta ja etenee kohti lehtisivuja Haetaan 5*, 15*, kaikki sivut >= 24*... 13 17 24 2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 17 * Haettaessa 15*, tiedetään ettei sitä ole puussa! 18 B+ -puuhun lisäys Lisäykset: Lisättäessä tietuetta B+ -puuhun sille haetaan sijoituspaikka edellä kuvatulla hakuoperaatiolla Jos sivulla on tilaa, tietue lisätään järjestyksessä oikealle paikalleen sivulla Jos tietue ei mahdu sivulle se sijoitetaan loogisesti oikealle paikalleen ja jaetaan ylivuotanut sivu: Otetaan käyttöön uusi sivu ja kytketään se linkitettyyn listaan Siirretään puolet alkuperäisen sivun tietueista uudelle sivulle Muodostetaan hakemistomerkintä (K new,p new ) uuden sivun ensimmäisen tietueen avaimesta ja sivun osoiteesta ja lisätään tämä siihen hakemistotietueeseen, jonka alaisuuteen jaettu sivu kuului Lisätään 8* esimerkin B+ -puuhun Lisäys aiheuttaa lehtitason täyttymisen ja tarvitaan halkaisu 2* 3* 5* 7* 8* Lisäys aiheuttaa myös hakemistotason täyttymisen ja tarvitaan halkaisu 5 17 5 13 24 Arvo joka lisätään ylemmälle tasolle (Huomaa että 5 kopioidaan ja Esiintyy edelleen lehtitasolla) Huomaa että arvo siirretään ylemmälle hakemistotasolle 19 20 5
Esimerkin puu arvon 8 lisäyksen jälkeen 5 13 17 24 lisättävä ei mahdu sivulle 2* 3* 5* 7* 8* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* v Huomaa että juuri on halkaistu ja puun korkeus kasvoi. v Esimerkissä halkaisu voidaan välttää siirtelemällä arvoja, mutta sitä ei yleensä tehdä. 21 22 otetaan käyttöön uusi datasivu kytketään uusi datasivu sivuketjuun 23 24 6
Siirretään puolet ylivuotavan sivun sisällöstä uudelle sivulle tehdään uudelle sivulle hakemistotietue ja lisätään se hakemistosivulle, jonka alaisuuteen tietue lisättiin 25 26 Hakemistotietue mahtui sivulle lisäys on valmis Rakenne on nyt hieman kasvanut, kyseessä kertaluvun 2 B+- puu 36 27 lisätään 2.2.2006 38 Tietokannan hallinta, kevät 2006, Jan 28 7
nouseva hakemistotietue ei mahdu hakemistosivulle keskimmäinen avain nousee ylöspäin 36 uusi sivu, jonne puolet 36 36 38 29 36 38 keskimmäinen nousee seuraavalle tasolle osoitin uuteen sivuun Jos jaettiin juuri, niin lisätään uuteen juureen vanhan osoite 36 36 36 38 31 36 38 32 8
Poistot Alkuperäisen B+ -puun idean mukaisesti tasapainotusta tehdään myös poistossa Jos datasivun täyttösuhde laskee alle puoleen ja sivun ja sen velisivun (sibling, saman isäsivun alla oleva vierussivu) yhteenlaskettu tietomäärä ylittää ylittää sivukoon, järjestetään sivuparin tietueet uudelleen siirtämällä täydemmältä sivulta tietue vajaalle sivulle. 70 kohdesivu velisivu poistetaan 33 34 tätä ei tarvitse vaihtaa vaikka tietue katosikin korvataan erotin sivun pienimmällä tunnuksella 70 70 kohdesivu Täyttösuhde liian pieni velisivu siirretään vajaalle Siirretty datatietue 36 9
70 Jos poiston kohteena olevan sivun ja sen velisivun yhteenlaskettu tietomäärä jää alle sivun kapasiteetin yhdistetään sivut ja poistetaan niiden välinen erotin hakemistosta. y rakenne tasauksen jälkeen 70 37 poistetaan 38 y y 70 70 siirretään kaikki velisivun tietueet kohdesivulle, vapautetaan tyhjentynyt sivu, poistetaan erotin hakemistosivulta 39 10
Hakemistosivujen tasapainotus Vyörytys Hakemistomerkinnän poiston takia hakemistosolmu voi jäädä vajaatäyttöiseksi Sivun täyttösuhdetta korjataan samalla periaatteella kuin datasivujenkin eli siirtämällä velisolmusta täydennystietue, siirto tehdään isäsolmun kautta vyöryttämällä Vyörytys: Olkoon kyseessä oikeanpuoleinen veli eli velisolmussa on isompia avaimia. Vyörytys tapahtuu tällöin seuraavasti Lisätään isäsolmusta kopioitu kohdesolmun ja velisolmun välinen avain kohdesolmun avainlistan loppuun Lisätään velisolmun osoitin p 0 kohdesolmun osoitinlistan loppuun Korvataan isäsolmussa ollut kohdesolmun ja velisolmun välinen avain velisolmun avainlistan pienimmällä avaimella Poistetaan velisolmun avain- ja osoitinlistojen alkupäästä ensimmäinen avain ja osoitin Sivuja yhdistettäessä vyörytetään kaikki velisolmun tietueet kohdesolmuun ja poistetaan isäsolmusta avain sekä osoitin velisolmuun Puun korkeus alenee, jos poistettavana on juurisolmun ainoa erotin. kohde kohde 96 45 120 0 120 45 96 0 sen veli sen veli 41 42 B+ -puun ominaisuuksia Kaikki toteutukset eivät käytä tasapainotusta poistojen yhteydessä, vaan antavat täyttöasteen laskea. B+ puun hakemistosivujen keskimääräiseksi täyttöasteeksi muodostuu lisäys- ja poistotasapainotusta käytettäessä noin 67% Olkoon B+ -puun korkeus h haettaessa indeksointiavaimen perusteella joudutaan tutkimaan h sivua ( h levyhakua) lisättäessä joudutaan lukemaan h sivua ja kirjoittamaan vähintään 1 ja enintään h+2 sivua poistettaessa joudutaan lukemaan vähintään h ja enintään 2h-1 ja kirjoittamaan vähintään 1 ja enintään 2h-1 sivua Indeksointiavaimen arvon muuttaminen täytyy B+ -puun yhteydessä hoitaa poisto ja lisäys operaatioina. 43 44 11
B+ -puu ennen poistoja Poistetaan 19* ja 20*... 17 17 5 13 24 5 13 27 2* 3* 5* 7* 8* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 2* 3* 5* 7* 8* 14* 16* 22* 24* 27* 29* 33* 34* 38* 39* 45 19* poisto on helppoa. 20* poisto tehdään uudelleen järjestelemällä lehtisivut. Huomaa kuinka keskimmäinen arvo kopioidaan. 46... Poistetaan 24* Vaatii yhdistämistä. Huomaa hakemistoarvon siirto ja siirto alaspäin. 22* 27* 29* 33* 34* 38* 39* 5 13 17 2* 3* 5* 7* 8* 14* 16* 22* 27* 29* 33* 34* 38* 39* 47 12