B-puu. 3.3 Dynaamiset hakemistorakenteet

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

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet

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

D B. Harvat hakemistot. Harvat hakemistot

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

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.

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

D B. Harvat hakemistot

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

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

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

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

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

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

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

D B. Tietokannan hallinta kertaus

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

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

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

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

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

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

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

Luento 2: Tiedostot ja tiedon varastointi

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

Algoritmit 2. Luento 6 To Timo Männikkö

B + -puut. Kerttu Pollari-Malmi

Algoritmit 1. Luento 8 Ke Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

2. Tietokannan tallennusrakenteet

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Tietokannan indeksointi: B puun ja hajautusindeksin tehokkuus

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

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Miten käydä läpi puun alkiot (traversal)?

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

HELIA 1 (15) Outi Virkki Tiedonhallinta

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Binäärihaun vertailujärjestys

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

7. Tasapainoitetut hakupuut

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

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 7 Ti Timo Männikkö

Kuva 1: J+-puun rakenne [HXS09].

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Tarkennamme geneeristä painamiskorotusalgoritmia

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

4. Joukkojen käsittely

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

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

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

Tietorakenteet, laskuharjoitus 6,

Datatähti 2019 loppu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

SQL - STRUCTURED QUERY LANGUAGE

1.1 Tavallinen binäärihakupuu

Algoritmit 1. Luento 12 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

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

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Hajautus. operaatiot insert ja search pyritään tekemään erittäin nopeiksi

CSE-A1200 Tietokannat

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

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

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

Tietorakenteet ja algoritmit. Hajautus. Ari Korhonen Tietorakenteet ja algoritmit - syksy

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

HELIA 1 (17) Outi Virkki Tiedonhallinta

14 Tasapainotetut puurakenteet

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

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

2. Tietokannan tallennusrakenteet

Transkriptio:

Tietokannan hallinta 2 3. Tietokannan hakemistorakenteet 3.3 Dynaamiset hakemistorakenteet Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa. Ajan mittaan epätasapainoa: hajautuksessa solujen ylivuotoketjut ISAM: perusjaksojen ylivuotoketjut Dynaamiset rakenteet: rakennetta ylläpidetään vähittäisin muutoksin jatkuvasti tasapainossa lisäys- ja poisto-operaatiot tulevat vain jonkin verran monimutkaisemmiksi, laaja uudelleenorganisointi tarpeettomaksi jaksoja ei voida pitää aina täynnä! tilaa kuluu jonkin verran enemmän Tietokannan hallinta 22 3. Tietokannan hakemistorakenteet B-puu Johdannoksi puurakenne yleensä: juuri, lapset, vanhemmat lehtisolmut, sisäsolmut, alipuu solmun asteluku: binääripuu, yleinen puu solmun taso, puun korkeus 2 3 8 5 4 5 6 7 8 p(4) p(5) p(6) p(7) p() 2 7 23 solmun rakenne: - sisältö, esim. hakuavain - linkit lapsiin (ehkä myös isään) Puurakenteen käyttö: esim. hakupuu solmut ohjaavat hakua seuraaville tasoille ja edelleen lehtisolmuihin asti vrt. ISAM-rakenne: hakemistojakso solmuna 2 22 Tietokannan hallinta 23 3. Tietokannan hakemistorakenteet Yleisen hakupuun solmu: joukko osoittimia ja hakuavaimen arvoja < P, K, P2,..., K(i-), Pi, Ki,..., K(q-), Pq > Tietokannan hallinta 24 3. Tietokannan hakemistorakenteet Hakupuu ei ole välttämättä tasapainossa; voi olla pieniä alipuita ja pitkiä hakuketjuja - puun muodostus lisäyksien sarjana? - luonnin jälkeiset lisäys- ja poisto-operaatiot järjestys: K < K2 <... < K(q-) Pi osoittaa alipuuhun, jonka solmuille X pätee: K(i-) < X < Ki (i >, i < q) X < K ; X > K(q-) (reunimmaiset) Kun solmu on levyjakso, q voi olla kohtuullisen suuri => puun korkeus pysyy kurissa (logaritmisuus, vrt. ISAM-laskelmat) Solmussa voi olla koko tietue (avain + muut kentät), tai vain avain K => tarvitaan osoitin tietueeseen (dataan) Tasapainoinen hakupuu saadaan esim. ehdoilla, jotka määrittelevät B-puun (kertaluokan p B-puu):. B-puun sisäsolmu on muotoa <P, (K,D), P2,..., (K(i-),D(i-)), Pi, (Ki,Di),..., (K(q-)D(q-)), Pq>, missä Di on osoitin avaimen Ki tietueeseen ja Pi on osoitin puun seuraavan tason solmuun Di voi olla jakso- tai tietueosoite. 2. K < K2 <... < K(q-). 3. Pi:n osoittamassa alipuussa olevat solmut ovat avainarvoltaan K(i-):n ja Ki:n välissä (vrt. hakupuu). 4. Jokaisessa solmussa on enintään p osoitinta (rakenneosoitinta puuhun). 5. Jokaisessa sisäsolmussa (paitsi juuressa) on vähintään (p/2) osoitinta. Juuressa on vähintään kaksi osoitinta, paitsi jos se on B-puun ainoa solmu. 23 24

Tietokannan hallinta 25 3. Tietokannan hakemistorakenteet 6. Kohdan mukaisessa solmussa on q puuosoitinta ja q- avainta ja dataosoitinta (q <= p). 7. Kaikki lehtisolmut ovat samalla tasolla. Lehtisolmun rakenne on muuten sama kuin sisäsolmun, mutta puuosoittimet ovat tyhjiä. Ominaisuudet 4 ja 5 takaavat B-puun tasapainon. Lehtien samantasoisuus seuraa puun konstruktiosta. Avainarvon X haku B-puusta: - haetaan avainta X juuresta - jos ei löydy, seurataan sitä puuosoitinta, jolle pätee K(i-) < X < Ki ja haetaan avainta X osoitetusta alipuusta (solmusta) (vrt. ISAM-hakemiston käyttö) Tietokannan hallinta 26 3. Tietokannan hakemistorakenteet 5 8 3 6 7 9 2 Lisäys B-puuhun: (p = 6) 3 82 4 7 777 8 - lisätään 52: mahtuu solmuun - lisätään 45: ei mahdu 3 52 82 4 45 7 777 8 (p = 3) Lisäyksen jälkeen tilaa on monelle uudelle lisäykselle! Lisäys ja poisto ovat monimutkaisempia, toteuttavat dynaamisuuden. (Toisin kuin ISAM-rakenne, B-puu muodostetaan peräkkäisin lisäyksin; ei erillistä luontivaihetta eikä uudelleenorganisointia.) 25 26 Tietokannan hallinta 27 3. Tietokannan hakemistorakenteet Lisäys B-puuhun: - ensimmäinen lisäys tyhjään juurisolmuun (muita ei ole) - p- lisäyksen jälkeen juureen ei voida enää lisätä (ehto 4: enintään p osoitinta => p- avainta) - tällöin tarkastellaan p avaimen joukkoa (juuren solmut +lisättävä): - jätetään vain järjestyksessä keskimmäinen avain juureen ja jaetaan muut kahteen osaan: kahdeksi tason solmuksi (uusia solmuja, joille pätee ehto 5) - asetetaan osoittimet vastaamaan jakoa - jaettaessa muu kuin juurisolmu menetellään kuten edellä sijoittamalla kuitenkin puolet solmuista uuteen solmuun samalla tasolla ja viemällä keskimmäinen solmu jaettavan solmun isäsolmuun - jos isäsolmussa ei ole tilaa, toistetaan menettely tälle jne (periaatteessa juureen asti) - Jos jaot etenevät juureen asti ja jos juuri on täynnä, juuri jaetaan kahtia (ja perustetaan uusi juuri, joka jää tässä vaiheessa hyvin vajaaksi!). Tässä tilanteessa puun korkeus kasvaa yhdellä. Tietokannan hallinta 28 3. Tietokannan hakemistorakenteet Poisto B-puusta: - poisto on yksinkertainen solmunsisäinen operaatio, mikäli poisto ei riko ehtoa 5 (solmu tulisi liian tyhjäksi). - jos poiston jälkeen solmussa olisi alle p/2 avainta, siihen siirretään vähintään yksi avain viereisestä (veljes)solmusta; jos avaimia on yhteensä liian vähän kahteen solmuun, ne yhdistetään yhdeksi solmuksi - solmujen yhdistäminen poistaa yhden osoittimen ja avaimen solmujen isäsolmusta; jos siinä olisi nyt liian vähän osoittimia, jatketaan kuten edellä (yhdistäminen voi edetä pahimmillaan juureen asti). Solmun avainlukumäärän ylä- ja alaraja takaavat sen, että jako ja yhdistäminen eivät toistu usein: yhden jaon tai yhdistämisen jälkeen ei tarvita uutta samaa operaatiota pitkään aikaan (samassa kohdassa B-puuta). Tasapainotilassa (satunnaiset lisäykset ja poistot) solmut ovat keskimäärin 69 %:sti täynnä. 27 28

Tietokannan hallinta 29 3. Tietokannan hakemistorakenteet Esimerkki. Olkoon K = tavua, levyjakso 4 KB, puuosoitin (jakso-osoite) B ja dataosoitin (tietueosoite) 5 B. B-puun solmu (enintään p osoitinta): p + (+5) * (p-) <= 496 eli p <= 7: solmussa on avaimia 58-6 kpl. Em..69-tuloksen mukaan osoittimia on noin 8 kpl. => avainten määrät eri tasoilla: juuri 79 (osoittimia 8) taso 632 64 taso 2 556 52 yhteensä n. 52 Solmun sisällä avaimet ovat järjestyksessä, samoin solmut löydetään järjestykseen perustuen. Haku solmun sisältä ei vaadi (uusia) levyhakuja. - erilaisia toteutustapoja (solmurakenteita) -- millaisia? (esim. q = 2-4 aika suuri peräkkäishakuun...) Kaikkien avainten sujuva läpikäynti järjestyksessä vaatii useiden jaksojen pitämisen puskurissa (yksi jakso / B- puun taso). Tietokannan hallinta 3 3. Tietokannan hakemistorakenteet B+ -puu = B-puun variantti, joka sopii paremmin hakemistoksi: kaikki dataosoittimet sijoitetaan B+ -puun lehtitasolle sisäsolmuissa säilytetään avainarvoja, jotka ohjaavat hakua (lehtitasolle etenemistä) kuten B-puussa lehtisolmut muodostavat tiheän hakemiston perustiedostoon lehtisolmut voidaan ketjuttaa => koko tiedoston läpikäynti järjestyksessä on tehokasta Solmurakenne: - sisäsolmu: < P, K, P2,..., K(i-), Pi, Ki,..., K(q-), Pq > - lehtisolmu: <K, D, K2, D2,..., K(q-), D(q-), Pnext> B+ -puun rakenteen ehdot sekä lisäys-ja poistooperaatiot ovat käytännössä hyvin samanlaiset kuin B- puun (-7 edellä). Ehdossa 3 alipuun avaimet voivat olla yhtäsuuria kuin (isä)solmun avainarvo: K(i-) < X <= Ki isäsolmussa avainarvo toistuu, viittana (= suurin avainarvo) 29 3 Tietokannan hallinta 3 3. Tietokannan hakemistorakenteet Sisäsolmujen avainten ei hakuperiaatteen kannalta tarvitse olla lehtisolmuissa esiintyviä ( sopivat avainarvot ISAM-rakenteen tapaan). Muodostettaessa B+ -puu peräkkäisillä lisäysoperaatioilla kopioidaan tason I solmujen rajakohtia osoittaviksi avaimiksi kuitenkin oikeita avainarvoja, jotka myös säilyvät poistoissa. Esimerkki solmujen koosta: Olkoon K tavua, levyjakso 4 KB, puuosoitin (jaksoosoite) B ja dataosoitin (tietueosoite) 5 B (kuten edellisessä esimerkissä). Sisäsolmu: p + (p-) <= 496 => p <= 25 Lehtisolmu: (5+)p + <= 496 => p <= 63 Täyttöasteen.69 mukaan sisäsolmussa on keskimäärin 4 ja lehtisolmussa 2 osoitinta. B+ -puun rakenne muodostuu seuraavasti: juuri 4 avainta 4 osoitinta taso 974 988 taso 2 278334 28322 lehtitaso 28322 * 2 = 3. * 8 tietueosoitinta (2-tasoisessa hakemistossa 988 * 2 = 2226672 tietueosoitinta) Tasojen lukumäärä pysyy siis hyvin pienenä! Tietokannan hallinta 32 3. Tietokannan hakemistorakenteet B+ -puu muodostaa luontevan tiheän hakemiston perustiedostolle, joka siis voi olla järjestämätön (kasa). Esim. Oraclen hakemistot: perustiedosto on rakenteeltaan kasa: tietueet voidaan sijoittaa jaksoihin tiiviisti ( % täyttöaste), niitä ei tarvitse siirtää (voi olla myös ryväs, jossa tietueita monesta relaatiosta) hakemistot B+ -puun muotoisia oheishakemistoja (optimoituja) hakemisto luodaan create index -lauseella: create unique index nimihak on employee (column lname asc, fname asc); - unique valinnainen, asc vastaa oletusarvoa (desc: laskeva järjestys, ei merkitystä): - unique takaa rivien yksikäsitteisyyden - tehokkuussyistä perusavaimelle suositellaan eheysrajoitteen (primary key tai unique) käyttöä, jolloin järjestelmä tekee hakemiston - create index -lauseen tarkennuksia (mm.): muistialue, varausyksiköt pctfree=3 (jakson varatila), nosort: perustiedosto järjestyksessä 3 32

Tietokannan hallinta 33 3. Tietokannan hakemistorakenteet Harva vai tiheä hakemisto? perustiedosto järjestyksessä vai kasa? harvassa yksi hakemistotaso vähemmän kuin tiheässä tiheän hakemiston tietueet yleensä selvästi perustietueita lyhyempiä (=> voi kompensoida korkeuseron) Oheishakemistojen merkitys levyhakujen kannalta: Oletetaan, että kasarakenteeseen on luotu ISAMrakenteista oheishakemistoa, ja jokaisen korkeus on 3. Operaatio insert into R values ( ) vaatii kaikkiaan 2 + * (2 + + ) = 42 levyhakua, jos mikään hakemistojaksoista ei ole puskurissa. Saantiajalla ms aikaa kuluu siis noin.4 s. B+ -puuhakemistoissa ylempien hakemistotasojen päivitys lisää joissakin tapauksissa (harvoin) muutamia levyhakuja. Tasojen määrään vaikuttaa mm. tietuerakenne. Muita toimintoja: - muodostetaan lokitietueita elvytystä varten, niiden kirjoitus levylle - viite-eheyksien tarkistukset (mahdollisesti paljon levyhakuja) Tietokannan hallinta 34 3. Tietokannan hakemistorakenteet Huom. Hakemistojen sijoittelu levylle on yleisesti tärkeä asia: lähelle perustiedostoa (esim. samalle sylinterille?) vai ei. Esim. + levyhaun tilanteet (jos hakemisto kaukana, kumpikin levyhaku hidas). Hakemisto luodaan yleensä vasta tiedoston luonnin (taulun sisällön lataamisen) jälkeen. - jos luodaan peräkkäisillä lisäyksillä, kaikki lisäykset vaativat hakemiston päivittämisen (ei harva ISAM) - optimointimahdollisuudet epätasapainon estämiseksi Taulun koko: aivan pienille tauluille ei kannata tehdä hakemistoa - käytöstä riippumatta. raja? (noin 8 jaksoa? 2-3 tietuetta?) Liitosoperaatio tehostuu hakemistoa käytettäessä: tiheä hakemisto (ilman perustietueita) riittää jopa liitosehdon testaamiseen (perustietueita hakematta). 33 34 Tietokannan hallinta 35 3. Tietokannan hakemistorakenteet Eri relaatioiden yhdistäminen samaan tiedostoon? E&N: file of mixed records Tarve? Eri relaatioiden rivien käyttö yhdessä, esimerkiksi osasto ja osaston työntekijät Tekniikka: fyysinen ryvästäminen ( klusterointi ): osaston rivi ja vastaavan osaston tietueet sijoitetaan lähekkäin (samaan jaksoon, ainakin samalle sylinterille) - monimutkaistaa tiedoston rakennetta: tarvitaan tietuetyyppi; tilan allokointi (eripituisia) (Ryvästäminen ei ole oikein relaatiomallin henkeen kuuluvaa; paremmin hierarkkiseen tai verkkomalliin sekä oliotietokantoihin.) Oraclessa: create cluster personnel (dept_number number(2)) create table emp ( deptno number(2) not null) cluster personnel(deptno) create table dept (deptno number(2), ) cluster personnel(deptno) Tietokannan hallinta 36 3. Tietokannan hakemistorakenteet - ryväs voi olla indeksoitu tai hajautettu; indeksoidussa rypäässä kaikki samalla ryväsavaimella varustetut rivit ovat peräkkäin: (d) Administration (e) 2345 Clark (e) 23456 Jones (e) (d) 3 Management (e) 88888 Hill 3 (e) 99999 Adams 3 Osastonumero voidaan tallentaa vain jaksokohtaisesti (eli jättää pois tietueista) ym. optimointia. - ryväs on SQL-kyselyjen kannalta läpinäkyvä, järjestelmä hoitaa sisäisesti. - säästää tilaa - hidastaa peräkkäiskäsittelyä (osastot tai työntekijät), lisäyksiä, ryväsavaimen päivityksiä 35 36

Tietokannan hallinta 37 3. Tietokannan hakemistorakenteet Dynaamiset hajautusmenetelmät Tietokannan hallinta 38 3. Tietokannan hakemistorakenteet Hakemiston dynaamisuus: Tavoite: välttää soluun (kotiosoitteeseen) liittyvä tietueiden kasautuminen (ylivuotojaksojen ketjuuntuminen). Erilaisia menetelmiä: dynaaminen hajautus, laajentuva hajautus, lineaarinen hajautus (ei käsitellä). Dynaaminen hajautus: binääripuun muotoinen hakemisto, jonka jokaisessa lehtisolmussa on osoitin yhteen soluun. Hajautusfunktion arvoa h(v) tarkastellaan binääriesityksensä mukaan (bittijonona) ensimmäisestä bitistä alkaen: -bitti osoittaa vasempaan alipuuhun, -bitti oikeaan perustiedoston jaksot solu... solu solu... Kun solun jakso tulee täyteen, se jaetaan kahdeksi jaksoksi, jaetaan solun tietueet hajautusarvon seuraavan bitin mukaan kahteen jaksoon ja lisätään hakemistotietue (osoittimet vanhaan ja uuteen jaksoon). Kun solu (esim. xyz ) tyhjenee, se poistetaan, sisarussolun (solun xyz ) hakemistopolulta jätetään yksi hakemistotietue pois ja liitetään sisarussolu edelliseen hakemistotietueeseen (xyz). Hienojakoisempikin dynaamisuus on mahdollista: puolityhjä solu voidaan yhdistää sisarussoluunsa, jos tila riittää (täyttösuhteelle alaraja) jne. Hakemistotietueet ovat tässä varsin pieniä, bittitason käsittelyn takia niitä (ja vastaavia tasoja) on tietysti enemmän kuin kokonaisia avainarvoja käsiteltäessä. Hakemisto voidaan kuitenkin usein pitää keskusmuistissa tai vain muutamassa levyjaksossa. solu... solu... solu... 37 38 Tietokannan hallinta 39 3. Tietokannan hakemistorakenteet Laajentuva hajautus (extendible hashing) Ylläpidetään hakemistoa, jossa on 2 d alkiota (hakemistotietuetta). Parametri d on hakemiston globaali syvyys. Jokaisen solun (perustietueiden jakson) lokaali syvyys d kertoo, moneenko hajautusavaimen bittiin solun osoitus perustuu. Tietokannan hallinta 4 3. Tietokannan hakemistorakenteet Dynaamisuus: ylivuoto solussa, jolle d <d : otetaan käyttöön uusi perustiedoston jakso ja päivitetään uuden jakson osoite hakemistossa (osoitteen paikka on olemassa) ylivuoto solussa, jonka d =d : uuden perusjakson lisäksi kaksinkertaistetaan hakemisto eli asetetaan d " d+ (esimerkissä esim. solu, hakemisto-osoitteet ja käyttöön) hakemisto globaali syvyys d=3 perustiedoston jaksot d =2 d =2 solu solu solu... solu... solu... solu... poisto analogisesti: yhdistetään tyhjät solut ja päivitetään osoitteet; hakemisto voidaan poiston yhteydessä puolittaa, jos kaikkien solujen d <d (missään ei tarvita hajautusarvon viimeistä bittiä) Normaalitapauksessa 2 levyhakua: yksi hakemistoon ja yksi soluun (tai hakemisto keskusmuistissa). 39 4