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

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

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

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

D B. Harvat hakemistot

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

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

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

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

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

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

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

D B. Harvat hakemistot. Harvat hakemistot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

B-puu. 3.3 Dynaamiset hakemistorakenteet

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

D B. Tietokannan hallinta kertaus

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 6 Ke 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.

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

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

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

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

Luento 2: Tiedostot ja tiedon varastointi

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Luento 6 Ke Timo Männikkö

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

Tietokannan indeksointi: B puun ja hajautusindeksin tehokkuus

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Luku 8. Aluekyselyt. 8.1 Summataulukko

D B. Tiedostojen käsittely

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

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

HELIA 1 (15) Outi Virkki Tiedonhallinta

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

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 2. Demot Timo Männikkö

2. Tietokannan tallennusrakenteet

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

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

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

Lineaarinen optimointitehtävä

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

Algoritmit 1. Luento 4 Ke Timo Männikkö

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

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

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

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

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

A TIETORAKENTEET JA ALGORITMIT

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

B + -puut. Kerttu Pollari-Malmi

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Ohjelmoinnin perusteet Y Python

Sisältö. 2. Taulukot. Yleistä. Yleistä

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 1. Luento 9 Ti Timo Männikkö

4. Joukkojen käsittely

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

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

Järjestelmäarkkitehtuuri (TK081702) Hajautettu tietokanta. Hajautuksen hyötyjä

Tietorakenteet ja algoritmit

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

Datatähti 2019 loppu

4. Hajautus. Hajautus (hashing) on vaihtoehto tasapainoisille puille dynaamisen joukon toteuttamisessa:

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet

7. Tasapainoitetut hakupuut

811120P Diskreetit rakenteet

Algoritmit 2. Luento 12 To Timo Männikkö

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Fyysinen suunnittelu

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Tietokanta (database)

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

2. Tietokannan tallennusrakenteet

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Helsingin yliopisto/tktl Tietokannan hallinta, s Harri Laine 1 D B. Kyselyjen käsittely ja optimointi

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

Algoritmit 1. Luento 11 Ti Timo Männikkö

2017 = = = = = = 26 1

Transkriptio:

Poistot Alkuperäisen B+ -puun idean mukaisesti tasapainotusta tehdään myös poistossa 50 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. kohdesivu velisivu poistetaan 1 2 tätä ei tarvitse vaihtaa vaikka tietue katosikin korvataan erotin sivun pienimmällä tunnuksella 50 50 kohdesivu Täyttösuhde liian pieni velisivu siirretään vajaalle Siirretty datatietue 4 60 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. 60 y rakenne tasauksen jälkeen 5 poistetaan 6

60 y y 40 60 70 40 60 70 siirretään kaikki velisivun tietueet kohdesivulle, vapautetaan tyhjentynyt sivu, poistetaan erotin hakemistosivulta 7 8 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 erotin velisolmun erotinlistan 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 erotin 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 9 10 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. 11 12

B+ -puut tietokantatoteutuksessa B+ -puu 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. Edellä käsitellyt B+ -puun haku- ja lisäystoiminnot perustuvat indeksointiavaimen yksikäsitteisyyteen tietyllä avaimella varustettu tietue on tietyllä sivulla. Rakennetta voi kuitenkin käyttää myös toistuvien avainarvojen yhteydessä (indeksointi vaikkapa henkilön nimen perusteella) vaihtoehto: datasivukohtaiset ylivuotolistat yleisesti käytetty vaihtoehto (esim. Oracle, DB2): Otetaan rivitunnus (rid) mukaan indeksointiavaimeen tällöin avaimet ovat aina yksikäsitteiset taulun rivit ovat tällöin yleensä kasarakenteena 1 14 Indeksin luonti ja hävitys Indeksin luonti ja hävitys TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto Komentoa ei ole standardoitu ja niinpä sen muoto vaihtelee järjestelmäkohtaisesti Indeksi voidaan luoda milloin tahansa taulun luonnin jälkeen siis tyhjälle taululle tai olemassaolevalle taululle jos tauluun ladataan suuri määrä dataa voi olla kannattavaa luoda indeksit vasta latauksen jälkeen saadaan aikaan parempi rakenne eikä jouduta jatkuviin rakenteen tasapainotuksiin Tietueet järjestetään ensin ja lisätään järjestyksessä Indeksit voidaan myös tiputtaa pois drop index komennolla halutaan uudelleenorganisoida indeksi tiputetaan se pois ja luodaan uudelleen suoritetaan iso päivityserä (lisäyksiä/poistoja/indeksointiavaimen muutoksia) on yleensä nopeampaa ja indeksien rakenteen kannalta parempi tiputtaa indeksit ja luoda ne uudelleen erän jälkeen 15 16 Dynaamiset hajautusratkaisut Dynaamiset hajautusratkaisut Aiemmin käsitelty hajautusrakenne perustui siihen, että tietueelle laskettiin soluosoite hajautusavaimen perusteella. Hajautusfunktio oli kiinteä ja sen arvoalue (osoiteavaruus) piti kiinnittää funktiota määriteltäessä. Tällöin ei välttämättä ole riittävää tietoa siitä, miten hajautusfunktio jakaa tietueet todellisessa käyttötilanteessa eikä välttämättä edes tietoa siitä, miten nopeasti tietueiden määrä kasvaa. Solua laajentavan ylivuotoketjun pituutta ei voida hallita ja ainakin alussa täytyy varata tilaa paljon yli todellisen tarpeen. B+ -puussa hakupolun pituus pidetään hallinnassa puolittamalla sivu ja pitämällä kummatkin puolikkaat samanmittaisen hakupolun päässä. Sivun puolituksen ideaa sovelletaan myös dynaamisissa hajautusrakenteissa. Tunnetuimpia näistä ovat laajeneva hajautus (extendible hashing) ja lineaarinen hajautus (linear hashing) 17 18

Laajenevassa hajautuksessa on käytössä kiinteä hajautusfunktio h ja sillä kiinteä osoiteavaruus osoiteavaruutta ei kuitenkaan suoraan vastaa mikään tilavaraus, joten se voi olla hyvinkin suuri tilavarauksessa lähdetään liikkeelle pienestä varauksesta ja sitä kasvatetaan tarpeen mukaan Rakenteessa käytetään soluhakemistoa, jonka koko on 2 d soluosoitetta. Eksponentti d ( 1) kasvaa tiedoston kasvaessa. Sitä kutsutaan rakenteen globaaliksi syvyydeksi (global depth). Soluhakemiston koko on siis 2, 4, 8,. solua Olkoon rakenteen d. Tällöin avaimen k solu (siis soluhakemiston indeksi) saadaan eristämällä hajautusfunktion antaman osoitteen lopusta d bitin pituinen osa tail_bits(h(k),d). Jos d=1 otetaan viimeinen bitti => {0,1} Jos d=2 otetaan 2 viimeistä bittiä => {00,01,10,11} 19 20 Lisäysten käsittely Jos soluhakemistosta löytyvässä kotilohkossa on tilaa tietue lisätään sinne kuten aiemmin käsitellyssä hajautuksessa Jos kotilohko (olkoon sen solutunnus binäärisenä {b}) on täynnä, otetaan käyttöön uusi lohko ja jaetaan ylivuotavan kotilohkon tietueet kotilohkon ja uuden lohkon välillä kotilohkolla on paikallinen syvyys (local depth) p (monenko bitin perusteella tietueet on sijoitettu lohkoon) Lisäyksen käsittely jatkuu tietueille tehdään uusi sijoittelu ottamalla käyttöön hajauttimen tuottaman osoitteen lopusta päin p+1:s bitti ne tietueet, joilla tämä bitti on 0, jäävät kotilohkoon ja muut siirtyvät (oletetaan, että kaikki eivät menneet samaan lohkoon, näinkin voisi käydä ) kotilohkon ja uuden lohkon paikalliseksi syvyydeksi asetetaan p+1 soluhakemiston alkiot, joiden indeksin p+1 viimeistä bittiä ovat 1{b} asetetaan osoittamaan uuteen lohkoon 21 22 lisätään: 0001 0101 1 2 lokaali syvyys monenko bitin perusteella sijoitettu 0001 0101 1 2 täynnä lisätään: 2 24

lisätään: 0001 0101 1 2 0001 0101 2 2 2 siirretään ne, joilla 2. viimeinen bitti on 1 siirretään ne, joilla 2. viimeinen bitti on 1 vanhan ja uuden paikallinen syvyys 2 vaihdetaan ne soluosoittimet, joiden indeksi loppuu..10 osittamaan uuteen 25 26 1000 1001 0001 0101 0101 2 2 0011 siirretään ne, joilla 2. viimeinen bitti on 1 vaihdetaan ne soluosoittimet, joiden indeksi loppuu..10 osittamaan uuteen 2 Jos jaettavan kotilohkon paikallinen syvyys on sama kuin rakenteen, joudutaan tuplaamaan soluhakemiston koko, (jotta voitaisiin kirjata osoite soluun 1{b}) Tuplaus tapahtuu helposti kopioimalla nykyinen soluhakemisto Tuplaus nostaa rakenteen globaalia syvyyttä yhdellä, kotilohkojen syvyydet säilyvät ennallaan 27 28 Rakenne laajenee sykäyksittäin Jos jakokohtaan osuvissa avaimissa on yhtenäinen bittisekvenssi, voidaan joutua tekemään monta jakoa ennen kuin tietueet saadaan jaettua Jos soluhakemisto kasvaa isoksi eikä sitä voida pitää keskusmuistissa voidaan hakuun tarvita 2 levyhakua jako ja tuplaus voivat edellyttää useita hakuja Lineaarisessa hajautuksessa (kotimaista alkuperää Per Larsson) ei välttämättä tarvita soluhakemistoa Hajautusaluetta laajennetaan solu kerrallaan jakamalla jakovuorossa olevan solun sisältö solun itsensä ja uuden solun kesken Solut saavat jakovuoronsa järjestyksessä, eikä jaettava solu ole suinkaan välttämättä se jonka kohdalla ylivuoto tapahtuu soluihin voidaan ylivuotavia tietueita varten liittää ylivuotolista 29

Solun osoitteen määräämiseksi käytössä on sarja hajauttimia h 0,h 1,h 2,... Nämä ovat muotoa h = h(k) mod (2 i i N). N voidaan valita kakkosen potenssiksi 2 d, tällöin h i eristäisi d+i bittiä perushajauttimen tuottaman arvon lopusta jos d=5, niin h 0 eristää 5 bittiä, h 1 6 bittiä jne tietueen haussa tarvitaan perushajauttimen lisäksi kahta hajautinta h taso ja h taso+1 Haku laske osoite h taso (h(k)), eli ota d+taso bittiä lopusta jos kyseessä on jakamaton solu, etsi tietuetta solusta. jos kyseessä on jaettu solu muodosta uusi osoite h taso+1 (h(k)), eli ota d+1+taso bittiä lopusta etsi tietuetta saadusta solusta Solu on jakamaton, jos sen indeksi on suurempi tai yhtä suuri kuin jakovuorossa olevan solun indeksi 1 2 Olkoon d=1, taso=2, eli h 2 antaa osoitteet 0..7 ja h osoitteet 0..15 jaettuja jakovuorossa jaon tuloksena syntyneitä seuraavan tason soluja Lisäyksessä, solmu lisätään haun määräämään lohkoon jos solmu ei mahdu kotilohkoon, se lisätään ylivuotoketjuun. Ylivuoto käynnistää jako-operaation Olkoon jakovuorossa olevan solun taso+d bitistä muodostuva osoite {b} Otetaan käyttöön uusi solu jonka osoite on 1{b} jakovuorossa olevan solun tietueet jaetaan alkuperäisen soluun ja uuden solun kesken käyttäen hajautinta h taso+1 Jos jakovuorossa oli tason viimeinen solu siirtyy jakovuoro soluun 0 ja tasoa kasvatetaan yhdellä, muuten jakovuoro siirtyy seuraavaan soluun. 4 Olkoon d=1, taso=2, eli h 2 antaa osoitteet 0..7 ja h osoitteet 0..15 jakovuorossa Kullakin tasolla jaetaan vuorollaan jokainen tason solu. Kun kaikki on jaettu, on hajautusalue tuplautunut ja siirrytään seuraavalle tasolle. Rakenteessa voi olla pitkiäkin ylivuotoketjuja, mutta ne lyhenevät kun taso kasvaa. jaettuja jaon vastaanottajat 5 6