Helsingin yliopisto/tktl Tietokantojen perusteet, s 2006 Tietokantaoperaatioiden toteutuksesta 3. Harri Laine 1

Samankaltaiset tiedostot
D B. Harvat hakemistot. Harvat hakemistot

Helsingin yliopisto /TKTL Tietokannan hallinta Harri Laine 1 D B. Harvat hakemistot. Harvat hakemistot

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

D B. Harvat hakemistot

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

Hakemistorakenteet. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

D B. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa. Poistot. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa

Helsingin yliopisto/tktl Kyselykielet, s 2006 Tietokantaoperaatioiden toteutuksesta Harri Laine 1. Tiedostorakenteet.

Tiedostorakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet

Helsingin yliopisto/tktl Tietokannan hallinta kevät Harri Laine 1 D B. Yksitasoiset talletusrakenteet

Yksitasoisia talletusrakenteita käytetään lähinnä datatietueiden talletukseen

D B. Tietokannan hallinta kertaus

B-puu. 3.3 Dynaamiset hakemistorakenteet

Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa.

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Algoritmit 2. Luento 5 Ti Timo Männikkö

Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Algoritmit 2. Luento 6 Ke Timo Männikkö

Hajautusrakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet

Luento 2: Tiedostot ja tiedon varastointi

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Algoritmit 1. Luento 6 Ke Timo Männikkö

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Algoritmit 2. Luento 7 Ti Timo Männikkö

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 6 To Timo Männikkö

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

D B. Tiedostojen käsittely

Algoritmit 2. Luento 4 To Timo Männikkö

Ohjelmoinnin perusteet Y Python

B + -puut. Kerttu Pollari-Malmi

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Algoritmit 2. Luento 9 Ti Timo Männikkö

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

Algoritmit 1. Luento 8 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Algoritmit 2. Luento 4 Ke Timo Männikkö

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Luku 8. Aluekyselyt. 8.1 Summataulukko

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

4 Tehokkuus ja algoritmien suunnittelu

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Ohjelmoinnin perusteet Y Python

HELIA 1 (15) Outi Virkki Tiedonhallinta

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

Tietokanta (database)

Levymuisti. R&G Chapter 8 & Tietokannan hallinta, kevät 2006, Jan 1

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Tiedon talletuspaikkoja. Levymuisti. Vaihtoehtoisia talletusrakenteita. Tietokantojen säilytys. R&G Chapter 8 & 9. Useita vaihtoehtoja:

Binäärihaun vertailujärjestys

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 1. Luento 12 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

D B. Levytiedostojen käsittely. Levytiedostojen käsittely

Algoritmit 1. Luento 12 Ke Timo Männikkö

2. Tietokannan tallennusrakenteet

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

HAAGA-HELIA Heti-09 1 (17) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Suorituskyky

Ohjelmoinnin perusteet Y Python

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

D B. Kyselyjen käsittely ja optimointi. Kyselyn käsittelyn vaiheet:

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Helsingin yliopisto/tktl Kyselykielet, s 2006 Tietokantaoperaatioiden toteutuksesta Harri Laine 1. Kyselyjen käsittely

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tarkennamme geneeristä painamiskorotusalgoritmia

A TIETORAKENTEET JA ALGORITMIT

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Tietorakenteet ja algoritmit

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

Tehtävä 2: Loppuosataulukko

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

Tietorakenteet ja algoritmit

Rakenteiset tietotyypit Moniulotteiset taulukot

Transkriptio:

Tietokantojen hakemistorakenteet Hakemistorakenteiden (indeksien) tarkoituksena on nopeuttaa tietojen hakua tietokannasta. Hakemisto voi olla ylimääräinen oheishakemisto (secondary index), esimerkiksi järjestämättömän peräkkäisrakenteen päälle rakennettu rakenne, joka tarjoaa vaihtoehtoisen polun, joidenkin kyselyjen toteutukseen oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja Hakemisto voi olla myös välttämätön osa tiedostorakennetta (primary index, clustered index). Tällöin tiedoston tietueet järjestellään hakemiston tarpeiden mukaisesti. Hakemistotyypeistä Hakemisto koostuu hakemistomerkinnöistä (index entry) perustuu johonkin muodostusperustaan (indexing field), eli yhteen tai useampaan tietueen kenttään on relaatiotietokantojen yhteydessä yleensä kentän koko arvoon perustuva tietueesta on samassa hakemistossa enintään yksi hakemistomerkintä vrt. esim. tekstitietokannoissa samaan hakemistoon voi tulla useita merkintöjä saman kentän (teksti) perusteella (jokainen kentässä oleva sana aiheuttaa merkinnän) 1 2 Hakemistotyypeistä Kokonaisiin arvoihin perustuva indeksi (kenttä TEXT): Index file has index entries Data file has data records TEXT: Index file has index entries Data file has data records DATA... data file file has has... avainsanaindeksi (samasta kentästä useita merkintöjä, tyypillisesti nämä kootaan yhteen siten, että yhdessä hakemistotietueesa on yksi avainarvo ja kaikki sen esiintymispaikkoihin viittaavat osoitteet) 3 Hakemistotyypeistä Hakemisto voi olla tiheä (dense) tiheässä hakemistossa on hakemistomerkintä jokaista tiedoston tietuetta kohti (taulun riviä kohti) harva (sparse) harvassa hakemistossa on yksi hakemistomerkintä jokaista tietyllä periaatteella määräytyvää tietuejoukkoa kohti 4 Hakemistotyypeistä Hakemistomerkintä sisältää vähintään hakemistoavaimen (indexing key) muodostusperustan määrittelemänä tietueesta tai tietuejoukosta tuotettu tunnus yleensä suoraan kentän arvo yhden tietueosoitteen (tietuetunnisteen,rid) tai joukon tietueosoitteita (mikäli sama avain esiintyy useassa tietueessa) 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 avain osoite avain osoite osoite osoite osoite 5 6 Harri Laine 1

Hakemiston toteutuksesta Hakemisto voitaisiin toteuttaa aiemmin käsiteltyjen tiedostorakenteiden avulla Järjestämätön peräkkäistiedosto, järjestetty peräkkäistiedosto, hajautusrakenne näistä käytännössä käytössä on vain hajautusrakenne ns. hash index -rakenteena. Hakemistoja varten on kehitetty myös erityisiä hakemistokäyttöön tarkoitettuja rakenteita (esim. B+-puu, tarkastellaan myöhemmin) Haku hakemistoa käyttäen on kaksivaiheista ensin etsitään hakemistomerkintä hakemistosivuilta ja hakemistomerkinnän perusteella haetaan tietueen (tietueet) sisältävä sivu(t) Tietueen hakua varten tarvitaan siis vähintään kaksi sivuhakua (elleivät sivut ole puskurissa) Hakemistotietuetta voidaan joutua etsimään usealta hakemistosivulta. Koska hakemistomerkinnät ovat yleensä lyhyempiä kuin varsinaiset datatietueet, niitä mahtuu sivulle useampia ja sivuja on vähemmän Seuraus: hakemiston kautta on nopeampi etsiä tietuetta 7 8 Ns. lihava hakemisto (fat index) sisältää varsinaisen hakukriteeritiedon lisäksi toistettua tietokannan dataa hakemistomerkinnässä esimerkiksi opiskelijatietojen hakua varten riittäisi tehdä hakemisto opiskelijanumeron perusteella, mutta koska opiskelijanumerolla haettaessa lähes aina kysytään opiskelijan nimeä otetaan nimikin mukaan hakemistomerkintään. jos haku kohdistuu pelkästään hakemistomerkinnästä löytyvään tietoon ei varsinaista datatietuetta tarvitse hakea lainkaan. Esimerkiksi Oracle tarjoaa yhtenä vaihtoehtona taululle index only -toteutusta. Tässä ratkaisussa ei ole lainkaan datatietueita vaan kaikki data on hakemistomerkinnöissä (= B-puu). Muutokset tiedostossa saattavat edellyttää muutoksia hakemistoon Tietueen lisäys tiedostoon edellyttää hakemistomerkinnän lisäämistä (tai merkintöjen muuttamista) kaikkiin kyseiseen tiedostoon liitettyihin tiheisiin hakemistoihin Tietueen poisto tiedostosta edellyttää tietueeseen liittyvien hakemistomerkintöjen poistamista (tai mitätöintiä) ainakin tiheissä hakemistoissa (ellei poistoa tehdä vain merkitsemällä tietue poistetuksi) Hakemiston muodostusperustana olevan kentän muuttaminen edellyttää hakemistomerkinnänkin muuttamista (yleensä edellisen poistoa ja uuden vientiä hakemistoon) 9 10 Jos hakemistomerkinnässä käytettävät tietueosoitteet voivat muuttua, saattaa tietueen todellinen poisto sivulta (niin että seuraavien tietueiden järjestysnumerot muuttuvat) edellyttää useiden hakemistomerkintöjen muuttamista eri hakemistosivuilla siksi tietuetunnisteet eivät yleensä muutu vaan kerran käyttöön otettu tunnus säilyy uudelleenorganisointiin asti (poistot poistoleimalla) Tarkastellaan esimerkkinä opiskelija-taulua: opiskelijanumero (avain, 10 merkkiä) nimi (enintään, keskimäärin 20) osoite palkka laitosnumero (4 merkkiä) jne, yht. keskimäärin 0 tavua. Taulusssa 00 riviä. Tietoja haetaan lähinnä opiskelijanumerolla, nimellä ja laitosnumerolla 11 12 Harri Laine 2

Olkoon osoitteen pituus 6 tavua ja hallintatietoa olisi 4 tavua yhtä hakemistomerkintää kohti tällöin merkintöjen koot olisivat a) Opiskelijanumero 20 tavua b) Opiskelijan nimi - keskimäärin tavua c) Laitosnumero tietuepituus riippuu taulukoitujen osoitteiden määrästä 4+4+n*6, jos n=200, niin 1208 tavua (hallintatieto + taulukon koko + taulukoidut osoitteet) Jos hakemisto olisi järjestetty peräkkäistiedosto, täyttösuhde 70% niin hakemistosivuille (4KB) menisi a) 1 merkintää -> yhteensä 58 sivua b) 93 merkintää -> yhteensä 87 sivua c) 3 merkintää -> yhteensä /3 = 14 sivua Kaikki hakemistot ovat niin pieniä, että ne kannattaa lukea peräkkäislukuna tarvittaessa a) hakuaika opiskelijanumerolla olisi keskimäärin 10ms+ (1/2)*10*58/ ms +10 ms+0,2 = 26 ms (kohdistus+pyörähdysviive) +keskimäärin siirto + datasivu) b) Haku nimellä veisi 10ms + (1/2)* 10*87/ ms + 10 ms+0,2 = 26.5 ms Näissä on oletettu, että haku tuottaa yhden osuman, jolloin päästään noin kolmannekseen järjestämättömän peräkkäistiedoston keskimääräisestä hakuajasta (levy sama 10 ms hajasaantiajan levy kuin aiemmin) 13 14 Haettaessa laitosnumerolla osumia tulee useampia. Oletetaan että laitoksia on, jolloin yhdellä laitoksella on keskimäärin 200 opiskelijaa Laitoksen opiskelijoidenden haku indeksiä käyttäen veisi aikaa: 10 ms + (1/2)*10ms*14/ + 200*(10+0.2) ms = 10ms+1.4ms+20ms= 2051.4 ms = noin 2s Indeksistä ei ole hyötyä sillä aiemmin laskettiin koko järjestämättömän peräkkäistiedoston lukemiseen menevän vain n 1ms. 15 Harvassa hakemistossa on ei ole hakemistomerkintöjä jokaista tietuetta kohden vaan yksi merkintä jotain isompaa kokonaisuutta esimerkiksi sivua tai sivujoukkoa (esim. saman uran sivut) kohti Harvan hakemiston käyttö edellyttää, että tietueet on järjestetty Mistä syystä tiedostolla voi olla vain yksi harva hakemisto 16 pienin mahdollinen 00 70 110 hakemistossa alarajat sivulle kuuluville avaimille ja osoitteet sivuille kaikki tietueet, joissa 70 avain < 110 kuuluvat sivulle 2 pienin mahdollinen 00 70 110 1 2 3 hakemistossa alarajat sivulle kuuluville avaimille (Voidaan toteuttaa myös ilman osoitteita, hakemistomerkinnän indeksi vastaa sivunumeroa) kaikki tietueet, joissa 70 avain < 110 kuuluvat sivulle 2 20 70 90 110 110 120 1 1 2 3 datatietueet järjestettynä peräkkäisrakenteena 17 20 70 90 110 110 120 1 1 2 3 perustietueet järjestettynä peräkkäisrakenteena 18 Harri Laine 3

datatietueet järjestettynä peräkkäistiedostona hakemistoon alarajat (tai ylärajat) sivulle kuuluvien tietueiden avaimille (+osoitteet sivuille) kaksi peräkkäistä hakemistoavainta määrää sivulle i kuuluvat avaimet h(i) sivulle i kuuluva avain < h(i+1) hakemisto voi olla monitasoinen jos alin hakemistotaso tulee liian isoksi, tehdään sille samoin harva hakemisto ylempi hakemistotaso alin hakemistotaso hakemistotasoja voisi olla useitakin, mutta yleensä 2 tai 3 riittää siihen, että ylimmän tason hakemisto on niin pieni, että se voidaan pitää jatkuvasti keskusmuistissa.... 19 20 Haku: etsi hakemistosivulta suurin hakemistoavain, joka on pienempi tai yhtä suuri kuin etsittävän avain, jos ollaan hakemistosivulla, siirry löydetyn alkion indeksin osoittamalle sivulle seuraavalla tasolla (jos hakemistomerkintöihin liittyy sivuosoite käytetään sitä indeksin tilalla) tässä joudutaan suorittamaan sivuhaku (ellei sivu ole puskurissa) jos ollaan datasivulla, etsi tietue sivulta 21 Jos datasivuille mahtuu useita tietueita tulee harva hakemisto tiheää pienemmäksi, joten haku on nopeampaa Esimerkki opiskelijatietueen keskipituus oli 0 tavua, joten yhdelle datasivulle voitaisiin sijoittaa vaikkapa 10 tietuetta (jätetty hieman tilaa lisäyksille) Tiedosto mahtuu 0 sivulle Kunkin sivun pienin avain viedään hakemistoon, jolloin hakemistosivulle menee keskimäärin 0 avainta (tässä muunnelmassa ei käytetä osoitteita) Tarvitaan 2 hakemistosivua Koko hakemisto (yht. 8K) voidaan pitää keskusmuistissa, joten tietueen hakuun opiskelijanumeron perusteella tarvitaan 1 sivuhaku sen jälkeen kun nuo 2 hakemistosivua on kerran ladattu. 22 Etuja pieni hakemisto - tehokas haku jos tietueita on N ja hakemistosivulle mahtuu X merkintää, tarvitaan hakemistoon roof(log X N) tasoa tukee myös arvovälihakuja hakuja avaimen alkuosalla (osoite like Helsingin% ) 23 Ongelmia tiedostolla voi olla vain yksi harva hakemisto sillä perustietueet voidaan järjestää vain yhteen järjestykseen lisäykset voivat aiheuttaa ongelmia jos lisäykset hoidetaan sivukohtaisilla ketjutetuilla ylivuotosivuilla, voi ketjusta tulla pitkä, jos lisäykset kasautuvat usein jätetään sivuille tilaa lisäyksille täyttösuhde huononee eikä tämä välttämättä hidasta kovin paljon rakenteen degeneroitumista tietueiden lisääminen satunnaisessa järjestyksessä on erityisen ongelmallista 24 Harri Laine 4

- 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 - ISAM 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 arvo, muille sivuille sivun ensimmäisen tietueen avain Hakemistosivut voidaan laittaa täyteen, sillä niitä ei päivitetä. 25 26 - ISAM - 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 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ä. 27 28 - ISAM - 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ää tiheän hakemiston toteutusrakenteena, siten että datatietueina eivät olekaan oikeat datatietueet vaan tiheän hakemiston hakemistomerkinnät. 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, jolloin levyhakuja olisi luokkaa: lisäysten määrä/sivukoko 29 Harri Laine 5

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 31 hakemisto voi laajeta ja kutistua Datasivut (sequence set) datasivujen joukko voi laajeta ja kutistua harva hakemisto 32 B+ -puun hakemisto on rakenteeltaan ISAM:in kaltainen, mutta Datasivujen täyttöaste -%, samoin hakemistosivujen ylintä sivua lukuun ottamatta. hakemiston alaisuuteen kuuluvan ensimmäisen sivun pienin avainarvo jää pois (osoitteet ja erottimet) 10 200 0 10 200 0 33 hakemistosivut eivät ole staattisia, niihin voi tulla uusia hakemistomerkintöjä, merkintöjä voidaan poistaa, sivuja voidaan jakaa ja yhdistää. B+ -puun tasapainovaatimuksena on, että jokainen hakupolku on yhtä pitkä, eli jokaisen tietueen hakemiseen tarvitaan yhtä monta sivuhakua (elleivät sivut ole puskureissa) lisäys- ja poisto-operaatiot säilyttävät hakurakenteen tasapainon 34 Tarkastellaan kertaluokan (order) d B+ -puuta Tällaisen puun jokaisessa hakemistosolmussa paitsi juuressa (ylin taso) on d m 2d erotinta ja m+1 osoitetta hakemistosivulla ovat siis osoitteet p 0,...,p m ja erottimet K 1,...,K m Kuten ISAM:ssa tietue kuuluu osoitteessa p i (i=1,...m) olevan sivun alaisuuteen, jos sen avaimelle pätee K i avain < K i+1 Tietue kuuluu osoitteessa p 0 olevan sivun alaisuuteen, jos sen avain < K 1 Haku (oletetaan, että avaimet yksikäsitteisiä) function search(node, key) { if (node is leaf) return node; else if (key<k[1]) return search(p[0],key); else if (key>=k[m]) return search(p[m],key); else { find i such that K[i]<=key<K[i+1]; return search(p[i],key]; } } Palauttaa datasivun osoitteen 36 Harri Laine 6

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 lisättävä ei mahdu sivulle Siirretään puolet alkuperäisen sivun tietueista uudelle sivulle Muodostetaan hakemistomerkintä (K new,p new ) uuden sivun ensimmäisen tietueen avaimesta ja sivun osoitteesta ja lisätään tämä siihen hakemistotietueeseen, jonka alaisuuteen jaettu sivu kuului 37 38 otetaan käyttöön uusi datasivu kytketään uusi datasivu sivuketjuun 39 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 41 42 Harri Laine 7

Hakemistotietue mahtui sivulle lisäys on valmis Hakemistomerkinnän lisääminen hakemistosivulle voi aiheuttaa ylivuodon hakemistosivulla. Lisätään aluksi hakemistomerkintä oikealle kohdalleen. Sivulla olisi nyt 2d+1 erotinta ja 2d+2 osoitetta Otetaan käyttöön uusi hakemistosivu X. Siirretään sinne erottimet K d+2...k 2d+1 ja osoitteet p d+1... p 2d+2 Muodostetaan nouseva hakemistotietue keskimmäisestä erottimesta K d+1 ja uuden sivun osoitteesta X. Tämä lisätään siihen hakemistosivuun, jonka alaisuuteen jaettu hakemistosivu kuului. Jos jaettu sivu oli juuri, lisätään sen osoitteeksi p 0 edellisen juuren osoite. 43 44 Rakenne on nyt hieman kasvanut, kyseessä kertaluvun 2 B+- puu nouseva hakemistotietue ei mahdu hakemistosivulle 36 36 39 lisätään 38 45 36 38 39 46 keskimmäinen avain nousee ylöspäin 36 uusi sivu, jonne puolet keskimmäinen osoitin uuteen sivuun nousee seuraavalle tasolle 36 36 38 39 47 36 38 39 48 Harri Laine 8

Jos jaettiin juuri, niin lisätään uuteen juureen vanhan osoite 36 Edellä kuvatulla tasapainotuksella hakemistosivuilla on aina vähintään d hakemistotietuetta (ei juuressa). Käytännössä erottimet voivat olla vaihtuvapituisia ja jakokriteeri voisi olla puolet käytettävissä olevasta tilasta erotinten lukumäärän sijasta. Mitä leveämpi hakupuu on, sitä matalampi se on ja sitä vähemmän levyhakuja tarvitaan sivun löytämiseksi. Puun leveyteen vaikuttaa se montako hakemisto-merkintää mahtuu hakemistosivulle. Useissa järjestelmissä ei tallennetakaan hakemistoon täydellisiä hakuperustakentän arvoja vaan pelkästään riittävän pitkiä osia arvojen alusta ohjaamaan hakuja 36 38 49 Erottimet lyhyempiä kuin arvot Erottimet lyhyempiä kuin arvot Alkuosa erottelu - Prefix key compression K vain riittävästi alusta, jotta haku voidaan ohjata oikealle sivulle Alkuosa erottelu - Prefix key compression Au K lisätään Anttila Asko Anttila Asko Autoliike Bil Bookstore KansaMarket Kyläkauppa Autoliike Bil Bookstore KansaMarket Kyläkauppa 51 52 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 53 54 Harri Laine 9

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 56 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. 70 y rakenne tasauksen jälkeen 70 poistetaan 57 58 y y 70 70 siirretään kaikki velisivun tietueet kohdesivulle, vapautetaan tyhjentynyt sivu, poistetaan erotin hakemistosivulta 59 Harri Laine 10

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 erotin kohdesolmun erotintaulukon loppuun Lisätään velisolmun ensimmäinen osoitin p 0 kohdesolmun osoitintaulukon loppuun Korvataan isäsolmussa ollut kohdesolmun ja velisolmun välinen erotin velisolmun erotintaulukon pienimmällä avaimella Poistetaan velisolmun avain- ja osoitintaulukkojen ensimmäinen erotin ja osoitin Sivuja yhdistettäessä vyörytetään kaikki velisolmun tietueet kohdesolmuun ja poistetaan isäsolmusta erotin sekä osoitin velisolmuun Puun korkeus alenee, jos poistettavana on juurisolmun ainoa erotin. 61 kohde kohde 96 45 120 0 120 45 96 0 sen veli sen veli 62 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% B+ -puun ominaisuuksia 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. 63 64 B+ -puut tietokantatoteutuksessa Useimmat tietokannan hallintajärjestelmät mahdollistavat B+ -puun käytön joko taulun toteutusrakenteena datasivuilla on taulun rivejä vastaavia tietueita ratkaisun huono puoli on se, että rivit voivat vaihtaa sivua, mikä tekee oheishakemistojen käytön työlääksi, kaikki osoitteet sivua vaihtaneeseen tietueeseen on vaihdon yhteydessä päivitettävä Oraclessa tämä on ratkaistu siten, että B+ -puu -rakenteisen tiedoston oheishakemisto ei käytäkään osoittamiseen tietueen osoitetta vaan tietueen pääavainta (haku hidastuu) tiheän hakemiston toteutusrakenteena datasivuilla on tiheän hakemiston hakemistomerkintöjä tämäon yleisin B+ -puun käyttötilanne. taulun rivit ovat tällöin yleensä kasarakenteena 65 Harri Laine 11