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

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

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

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

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

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

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

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

D B. Harvat hakemistot. Harvat hakemistot

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

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

D B. Tietokannan hallinta kertaus

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

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

D B. Harvat hakemistot

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

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Luento 2: Tiedostot ja tiedon varastointi

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

2. Tietokannan tallennusrakenteet

2. Tietokannan tallennusrakenteet

Tietorakenteet, laskuharjoitus 7, ratkaisuja

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet

D B. Tiedostojen käsittely

B-puu. 3.3 Dynaamiset hakemistorakenteet

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

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

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

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

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

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

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

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

Algoritmit 2. Luento 2 To Timo Männikkö

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

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 6 Ke Timo Männikkö

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

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

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

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

Kyselyiden käsittely. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

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

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Luento 14 Ke Timo Männikkö

SYÖTTÖPOHJA LUKUJEN SYÖTTÖÖN ERI TARKOITUKSIIN

Ohjelmoinnin perusteet Y Python

Fyysinen suunnittelu

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Ohjelmoinnin perusteet Y Python

HELIA 1 (15) Outi Virkki Tiedonhallinta

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

FYYSINEN SUUNNITTELU

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

D B. Kyselyjen käsittely ja optimointi. Kyselyjen käsittely ja optimointi

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

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Ohjelmoinnin perusteet Y Python

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

Algoritmit 2. Demot Timo Männikkö

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

Algoritmit 1. Luento 7 Ti Timo Männikkö

RJESTELMÄ Stallings, Luku KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 1. Luento 10 Ke Timo Männikkö

Tietorakenteet ja algoritmit - syksy

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

Reaalilukuvälit, leikkaus ja unioni (1/2)

Algoritmit 1. Demot Timo Männikkö

Tietokanta (database)

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

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

Tieto ohjelmassa ja tietokoneella

4 Tehokkuus ja algoritmien suunnittelu

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Algoritmit 2. Luento 7 Ti Timo Männikkö

Transkriptio:

Yksitasoiset talletusrakenteet Yksitasoisia talletusrakenteita käytetään lähinnä datatietueiden talletukseen järjestämätön peräkkäisrakenne (kasa, heap) järjestetty peräkkäisrakenne (sequential file) hajautusrakenne 1

Järjestämätön peräkkäisrakenne (kasa) Järjestämättömässä peräkkäisrakenteessa (heap) tietueet sijoitetaan peräkkäin tiiviisti tiedoston sivuille lisäysjärjestyksessä - uusi tietue lisätään aina tiedoston loppuun. Rakenne on useissa tkhj:ssä taulujen toteutuksen perusrakenne (datatietueiden talletusrakenne) Rakenne soveltuu hyvin peräkkäiskäsittelyyn, jossa tietueiden järjestyksellä ei ole merkitystä 2

Järjestämätön peräkkäisrakenne (kasa) Taulun perustaminen create table lauseella luo tyhjän kasan yleensä tämä tarkoittaa yhtenäisen sivualueen varaamista tiedostolle, alueen koko voi olla järjestelmän päättämä tai siihen voi vaikuttaa esim. järjestelmäparametreilla tai create table lauseella Oraclen käyttää tästä alkuvarauksesta nimitystä initial extent ja sen koon voi määritellä taulukohtaisesti jos tiedosto kasvaa niin suureksi, ettei se enää mahdu alkuperäiselle sivualueelle otetaan käyttöön jatkoalueita. Tyypillisesti alueet kytketään ketjurakenteeksi (chain) 3

Järjestämätön peräkkäisrakenne (kasa) Lisäys kasarakenteessa on nopeaa. Haetaan tiedoston viimeinen sivu ja lisätään tietue sinne. Ellei tietue mahdu sivulle otetaan käyttöön seuraava sivu. Korkeintaan 2 levyhakua (oletetaan kuvaajan olevan muistissa) Mutta, jos tiedostolle on määritelty avain, vaatii avaimen yksikäsitteisyyden tarkastus pahimmassa tapauksessa (silloin kun avain on yksikäsitteinen) koko tiedoston lukemisen 4

Järjestämätön peräkkäisrakenne (kasa) Jos tiedostossa on N sivua, vaatii tietueen haku avaimen perusteella keskimäärin N/2 levyhakua. Yleensä kasarakennetta ei käytetäkään yksinään, vaan sen päälle rakennetaan tiheitä indeksejä tehostamaan hakuja esimerkiksi Oraclessa avaimen määrittely luo automaattisesti avainperustaisen indeksin. Tietuejoukon haku edellyttää koko tiedoston läpikäyntiä 5

Järjestämätön peräkkäisrakenne (kasa) Tietueen poisto edellyttää tietueen hakua tietueen poistamista haetulta sivulta yleensä merkitsemällä tietue poistetuksi tietueelta vapautunut tila voidaan jättää käyttämättä tai vapauttaa muiden sivujen käyttöön joko yhtenäistämällä sivu tai liittämällä tietueelle varattu alue vapaiden alueiden ketjuun. muuttuneen sivun vientiä takaisin levylle Poistojen seurauksena sivuille tulee tyhjää tilaa ja tiedoston täyttösuhde pienenee. 6

Järjestämätön peräkkäisrakenne (kasa) Jos poisto tyhjentää koko sivun, voidaan sivu liittää vapaiden sivujen ketjuun uudelleenkäytettäväksi. Vaihtuvapituisten tietueiden muutokset voivat kasvattaa tietueen pituutta. Tietueiden pituuden kasvuun voidaan varautua jättämällä sivuille kasvuvaraa eli sivuja ei täytetä heti aluksi täyteen vaan vaikkapa vain 70 prosenttisesti. Voi käydä myös niin, että kasvanut tietue ei enää mahdu sivulle. Tällöin käytetään tyypillisesti ylivuotosivuja tietueiden ylivuotaneiden osien tallennukseen. Tietueita ei siirretä kokonaan toiselle sivulle, koska silloin jouduttaisiin ylläpitämään indeksejä. Ylivuotosivut ovat huonoja peräkkäiskäsittelyn kannalta. 7

Järjestämätön peräkkäisrakenne (kasa) Poistot ja muutokset degeneroivat rakennetta rakenteesta tulee harva ja epäyhtenäinen rakenne voidaan korjata ajoittaisin uudelleenorganisoinnein uudelleenorganisoinnissa luodaan uusi kasarakenne ja korvataan sillä vanha kaikki vanhan rakenteen varaan rakennetut indeksit on uudelleenorganisoinnissa rakennettava uudelleen. 8

Järjestämätön peräkkäisrakenne (kasa) Kyselyn Tarkastellaan taulua employee. Oletetaan että taulussa on 8000 riviä (ei ihan pikkufirma). Tehdään kysely select * from employee where ssn= 1234567 Joudutaan läpikäymään koko tiedosto ellei tiedetä, että ssn on avain ja keskimäärin puolet, jos se on määritelty avaimeksi ja löytyy (ensimmäinen osuma on ainoa) siis keskimäärin 4000 riviä 9

Järjestämätön peräkkäisrakenne (kasa) Olkoon levyn pyörimisnopeus on 100 kierrosta sekunnissa, lohkokoko 4K tavua, uralla 50 lohkoa, levypintoja 12 sekä täyttösuhde 80%.Kohdistusaika keskimäärin 5ms. Yhden Employee-tietueen keskipituus voisi olla 300 tavua. Lohkossa olisi tällöin keskimäärin 10 tietuetta, uralla 500 ja sylinterillä 6000, eli tarvitaan 16 uraa (alle 2 sylinteriä) ja yhteensä 16 kierrosta koko tiedoston siirtämiseen. Oletetaan että käytössä on ns. kaksoispuskurointi, eli puolet puskureista on käsittelyssä samalla kun toiseen puoleen luetaan. Tällöin luku voi jatkua keskeytyksettä jos ohjelma ehtii käsitellä puskurit nopeammin kuin luku etenee. Aikaa kuluisi tällöin kohdistusaika+pyörähdysviive+16*siirtoaika (+yksi lyhyt sylinterisiirtymä)= 5ms+5ms+16*10 ms(+10ms)=180 ms ja avainpohjaisessa haussa keskimäärin puolet tästä eli n 90 ms (olettaen, että tietue löytyy) 10

Järjestämätön peräkkäisrakenne (kasa) Rakenne voitaisiin toteuttaa myös sivujen ketjuna, mutta tällöin menetettäisiin peräkkäishausta saavutettava etu tietueiden haussa Esimerkin tapauksessa koko tiedoston hakuun kuluisi 800 *(10ms+0.2ms) = 8160 ms ja vaikka kohdistusaika jatetään huomiotta niin 800*(5ms+0.2ms)=4160ms (>4s) ja avainhakuun puolet tästä. 11

Järjestetty peräkkäisrakenne Sequential file Tietueet sijaitsevat tiedostossa jonkin kentän (esimerkiksi työntekijänumeron) mukaan järjestettyinä. Tietueiden järjestys on jokin tyypillisesti käsittelyssä usein tarvittava järjestys Rakenne tukee tietueiden käsittelyä peräkkäin halutussa järjestyksessä 12

Järjestetty peräkkäisrakenne Lisäykset pitää järjestetyssä peräkkäisrakenteessa sijoittaa oikealle kohdalleen järjestyksessä. 10 20 30 40 50 60 70 80 90 100 45 Pahimmassa tapauksessa pitäisi siirtää koko tiedoston loppuosa uusiin paikkoihin Yleensä jätetään lisäyksille tilaa sivuille täyttösuhde jää alhaiseksi Jos sivulle tulee lisäys, joka ei mahdu sinne, otetaan käyttöön ylivuotosivu, joka linkitetään sivuun. Lisäysten kasautuessa ylivuotoketjusta voi tulla pitkä Rakenne degeneroituu nopeammin kuin kasa Tarvitaan useammin uudelleenorganisointeja 13

Järjestetty peräkkäisrakenne Poistot ja muutokset tehdään kuten kasarakenteeseen. Tietueen haku tiedostosta järjestysavaimen perusteella vaatii tiedostoa läpilukemalla saman verran levyhakuja kuin kasarakenteessa, jos tietue löytyy eli N/2. Löytymättömyys voidaan todeta keskimäärin samalla levyhakujen määrällä. Tässä suhteessa rakenne on parempi kuin kasa. Järjestetty peräkkäisrakenne tukee myös järjestysavaimeen perustuvia arvovälihakuja sekä erisuuruusvertailuja!=,<,<= 14

Järjestetty peräkkäisrakenne Järjestetty peräkkäisrakenne mahdollistaa myös binäärihaun käytön. Periaate: Etsi tietuetta tiedoston keskimmäiseltä (k=roof(n/2)) sivulta Jos ei löytynyt ja avain<sivun pienin avain, jatka samalla periaatteella sivuilta 1.. k-1. Jos ei löytynyt ja avain>sivun suurin avain, jatka samalla periaatteella sivuilta k+1.. N. Haku päättyy kun tietue löytyy tai tietuetta ei löydy sivulta mutta avain sijoittuu sivun pienimmän ja suurimman avaimen väliin (ei ole tiedostossa) tai etsintää pitäisi jatkaa tyhjästä sivujoukosta 15

Järjestetty peräkkäisrakenne Binäärihaussa tarvitaan enintään roof(log 2 N) levyhakua. (roof(x) = pienin kokonaisluku, joka on suurempi kuin x) Aiemman esimerkin 8000 employee-tietueen tiedostossa oli 800 lohkoa, eli tietueen haku järjestysavaimen perusteella vaatisi enintään roof(log 2 800) = 10 levyhakua, joka satunnaishakuajalla laskettuna samalla n 10 ms satunnaishakuajan levyllä olisi hieman vähemmän kuin keskimääräinen saantiaika kasarakenteesta 10*(10ms+10/50*10ms)=102ms vs. 160 ms Tosin tiedosto voidaan sijoittaa kahdelle vierekkäiselle sylinterille, joten hakuvarren siirtoja ei juurikaan tule ja jos lasketaan vain pyörähdysviive 5 ms ) niin saataisiin 10*5ms+2ms= 52 ms Isommilla tiedostoilla binäärihaku parantaa asemaansa suhteessa koko tiedoston peräkkäiseen läpikäyntiin 16

Järjestetty peräkkäisrakenne Järjestetty peräkkäisrakenne ei ole tyypillinen tietokantojen yhteydessä käytetty tiedostorakenne Vanhanaikaisissa eräsovelluksissa se oli laajasti käytetty soveltuu erityisen hyvin tilanteisiin, jossa pitää tahdistaa usean laajan aineiston käsittely 17

Hajautukseen perustuvat tiedostorakenteet Hajautukseen perustuvissa tiedostorakenteissa on tavoitteena yksittäisen tietueen nopea haku. Tähän pyritään siten, että tietueen sijoituspaikan eli solun (cell, bucket) osoite lasketaan jonkin tietueessa olevan tiedon eli hajautusavaimen (hash key) perusteella. Parhaassa tapauksessa solu olisi tietty tiedoston lohko. Yleensä solu kuitenkin muodostuu useasta lohkosta enintään yhdestä kotilohkosta ja joukosta ylivuotolohkoja (tai jatkolohkoja) ylivuotolohkot voivat olla solukohtaisia tai jaettuja 18

Hajautukseen perustuvat tiedostorakenteet Solun osoitteena on joko kotilohkon osoite (tällöin ei käytetä soluhakemistoa) tai soluhakemiston indeksi soluhakemisto on taulukko, jonka alkioina on kotilohkojen osoitteita Mahdolliset soluosoitteet muodostavat osoiteavaruuden (address space) soluhakemistoa käytettäessä saadaan pienellä lisätilalla kasvatettua osoiteavaruutta moninkertaiseksi 19

Hajautukseen perustuvat tiedostorakenteet A) Solun osoite on soluhakemiston indeksi (11) (19) soluhakemiston sivu lohko x solu 19 solu 11 Lohkot käyttävissä koti- tai ylivuotolohkoiksi Tyhjille soluille varataan tilaa vain soluhakemiston alkion verran Soluhakemisto on haettava erikseen Yleisimmin käytetty ratkaisu 20

Hajautukseen perustuvat tiedostorakenteet B) Solun osoitteena on kotilohkon osoite (11) Talletukseen varattu perustila - kotilohkot Tyhjätkin solut varaavat tilaa yhden lohkon verran Ylivuotolohkoille oma alueensa 21

Hajautukseen perustuvat tiedostorakenteet Osoitteen laskentaan käytetään hajautusfunktiota (hajautinta) (hash function, randomizing function) Olkoon h(x) hajautus funktio ja R K tietue, jonka hajautusavain on K Tällöin R K :n sijoitussolun osoite = h(k). Solujen sisällä tietueet sijoitetaan kasarakenteen tapaan eli lisäykset loppuun 22

Hajautukseen perustuvat tiedostorakenteet Optimitapauksessa tietue löytyy yhdellä levyhaulla eli solun kotilohkosta*. Tämä edellyttää, että hajautusfunktio jakaa tietueet tasaisesti osoiteavaruuden osoitteisiin osoiteavaruus on määritelty riittävän isoksi niin, että kaikki tietueet voidaan sijoittaa solujen kotilohkoihin * soluhakemistoa käytettäessä joudutaan satunnaisesti hakemaan myös soluhakemiston sivuja 23

Hajautukseen perustuvat tiedostorakenteet Haku avaimella K: lasketaan hajautusfunktiolla solun osoite s=h(k) jos käytössä on soluhakemisto haetaan kotilohkon osoite sieltä p=h[s] (jos hakemistoalkio on tyhjä, haku päättyy) muuten käytetään kotilohkon osoitteena solun osoitetta p=s. haetaan sivu lohkosta p ellei tietuetta löydy käydään läpi solun muut lohkot Jos hajautusavain ei ole tietueen avain on haussa käytävä läpi kaikki solun sivut. 24

Hajautukseen perustuvat tiedostorakenteet Oletetaan, että tiedosto mahtuisi kasarakenteena N sivulle ja hajautusavaimella olisi k erilaista arvoa. Olkoon osoiteavaruus 0,..B-1 Tällöin tulisi valita B<=k (muuten varataan tilaa soluille, jotka välttämättä jäävät tyhjiksi), Vain, jos B>=N, voidaan päästä yhteen levyhakuun tietuetta haettaessa B:n kokoon vaikuttavat mm. hajautusfunktio hajautusavaimen rakenne käytetäänkö soluhakemistoa, jolloin osoiteavaruuden koon kasvattaminen on kevyempää 25

Hajautukseen perustuvat tiedostorakenteet Hajautusfunktio on tyypillisesti muotoa h(k) = int(k) mod B missä int(k) muuntaa hajautusavaimen kokonaisluvuksi Hyvältä hajautusfunktiolta edellytetään, että se jakaa hajautusavaimen arvot tasaisesti osoiteavaruuteen laskennan nopeus ei ole yhtä oleellista kuin keskusmuistihajautuksessa Hajautukseen perustuvat rakenteet nopeuttavat hakua vain kyselyissä, joissa tietueita haetaan hajautusavaimeen perustuvan yhtäsuuruusehdon avulla. 26