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

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

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

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

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

D B. Harvat hakemistot. Harvat hakemistot

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

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

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

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

D B. Tietokannan hallinta kertaus

D B. Harvat hakemistot

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

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

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Luento 2: Tiedostot ja tiedon varastointi

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet

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

2. Tietokannan tallennusrakenteet

2. Tietokannan tallennusrakenteet

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

B-puu. 3.3 Dynaamiset hakemistorakenteet

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

D B. Tiedostojen 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)

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

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

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

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

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

Ohjelmoinnin perusteet Y Python

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

HELIA 1 (15) Outi Virkki Tiedonhallinta

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

Algoritmit 2. Luento 2 To Timo Männikkö

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

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

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

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Luku 8. Aluekyselyt. 8.1 Summataulukko

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

Fyysinen suunnittelu

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

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

Algoritmit 2. Luento 6 To Timo Männikkö

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

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

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

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

Ohjelmoinnin perusteet Y Python

Tiedonhallintajärjestelmän rakenne ja Suorituskyky

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

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Algoritmit 2. Demot Timo Männikkö

Tieto ohjelmassa ja tietokoneella

Algoritmit 2. Luento 2 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

HELIA 1 (11) Outi Virkki Tiedonhallinta

Algoritmit 1. Demot Timo Männikkö

FYYSINEN SUUNNITTELU

Algoritmit 1. Luento 10 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ohjelmoinnin perusteet Y Python

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

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

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

A TIETORAKENTEET JA ALGORITMIT

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Algoritmit 1. Luento 4 Ke Timo Männikkö

Joukossa X määritelty relaatio R on. (ir) irrefleksiivinen, jos x Rx kaikilla x X,

Relaation ominaisuuksia. Ominaisuuksia koskevia lauseita Sulkeumat. Joukossa X määritelty relaatio R on. (ir) irrefleksiivinen, jos x Rx kaikilla x X,

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

Kyselyn yleisrakenne:

Algoritmit 1. Luento 7 Ti Timo Männikkö

PALKKA-AINEISTON SIIRTOTIEDOSTO

Ohjelmoinnin perusteet Y Python

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

TIETOKANTOJEN PERUSTEET MARKKU SUNI

SQL - STRUCTURED QUERY LANGUAGE

Transkriptio:

Tiedostorakenteet Tiedostorakenne määrittelee miten tietueet tallennetaan tiedostoon miten tietoja haetaan Tiedostorakenne on yksitasoinen (flat), jos se muodostuu pelkästään datatietueista. Tiedostorakenne on monitasoinen, jos hakua tehostavat indeksit ovat välttämätön osa tiedostorakennetta. Jos indeksit eivät ole välttämättömiä tiedostorakenteen osia vaan erillisiä lisärakenteita, niitä kutsutaan oheisindekseiksi (oheishakemistoiksi, secondary index). Tiedostorakenteet 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 2 Järjestämättömässä peräkkäisrakenteessa (heap) tietueet sijoitetaan tiiviisti peräkkäisille sivuille lisäysjärjestyksessä Uusi tietue lisätään aina tiedoston loppuun. Jos tietue mahtuu tiedoston viimeiselle sivulle, se lisätään sinne, muuten otetaan käyttöön uusi sivu. Rakenne on useissa tkhj:ssä taulujen toteutuksen perusrakenne (datatietueiden talletusrakenne) Rakenne soveltuu hyvin peräkkäiskäsittelyyn, jossa tietueiden järjestyksellä ei ole merkitystä Taulun perustaminen create table lauseella luo tyhjän tiedoston 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 4 Tietueen lisäys järjestämättömään peräkkäistiedostoon on nopeaa. Haetaan tiedoston viimeinen sivu ja lisätään tietue sinne. Ellei tietue mahdu sivulle otetaan käyttöön seuraava sivu. Kuitenkin, jos tiedostolle on määritelty avain, vaatii avaimen yksikäsitteisyyden tarkastus pahimmassa tapauksessa koko tiedoston lukemisen (silloin kun avain on yksikäsitteinen) Yksittäisten tietueiden haku järjestämättömästä peräkkäisrakenteesta on sivuhakujen määrillä laskettaessa hidasta Jos tiedostossa on N sivua, vaatii tietueen haku avaimen perusteella keskimäärin N/2 levyhakua. Yleensä järjestämätöntä peräkkäisrakennetta ei käytetäkään yksinään, vaan sen ohella käytetään hakua tehostavia oheisindeksejä. Esimerkiksi Oraclessa taulun oletusarvoinen toteutusrakenne on järjestämätön peräkkäisrakenne, mutta avaimen määrittely luo sen oheen automaattisesti avainperustaisen oheisindeksin. 5 6 Harri Laine 1

Tietuejoukon haku jonkin muun kuin avaimeen perustuvan hakuehdon perusteella edellyttää koko tiedoston läpikäyntiä (N sivua) Vaikka sivuhakuja on runsaasti, rakenne voi silti toimia hyvin varsinkin suhteellisen pienillä tiedostoilla, sillä hauissa voidaan käyttää hyväksi sivujen peräkkäisyyttä (siirtoaika muodostuu merkittävimmäksi tekijäksi) Tietueiden muutokset voivat olla ongelma Jos tietuepituus kasvaa muutoksessa, tietue ei välttämättä enää mahdu kokonaisuudessaan sivulle muutoksen jälkeen Tyypillinen ratkaisu on käyttää jatkosivua, jonne tietueen ylivuotanut osa viedään. Perussivulle sijoitetaan jatkosivuun osoittava linkki. Koska jatkosivu ei kuitenkaan ole lähellä perussivua menetetään peräkkäishaun tuottama nopeusetu. Yleensä sivuille jätetään kasvuvaraa muutoksille esim. 20% riippuen siitä miten tietueiden ennakoidaan kasvavan. 7 8 Poistot helpompia hoitaa kuin muutokset. Poistettu tietue yleensä vain leimataan poistetuksi. Täyttöaste pienenee, jos poistoja on paljon Poistettujen tietueiden tila voidaan käyttää kasvuvarana muutoksissa Tarkastellaan taulua opiskelija. Oletetaan että taulussa on 8000 riviä. Tehdään kysely select * from opiskelija where opnro= 1234567 Joudutaan läpikäymään koko tiedosto ellei tiedetä, että opnro 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 10 Olkoon levyn pyörimisnopeus on 100 kierrosta sekunnissa, sivukoko 4K tavua, uralla 50 sivua, levypintoja 12 sekä täyttösuhde 80%.Kohdistusaika keskimäärin 5ms. Yhden Opiskelija-tietueen keskipituus voisi olla 300 tavua. Sivulla 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 riittävästi puskuritilaa, jotta luku voi edetä keskeytymättä. Koko tiedoston lukuun kuluisi tällöin kohdistusaika+pyörähdysviive+16*kierrosaika (+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) 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ä 11 12 Harri Laine 2

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 järjestämätön Tarvitaan useammin uudelleenorganisointeja 13 Poistot ja muutokset tehdään kuten järjestämättömässä peräkkäisrakenteeseen. Tietueen haku tiedostosta järjestysavaimen perusteella vaatii tiedostoa läpilukemalla saman verran levyhakuja kuin kasarakenteessa, eli N/2, jos tietue löytyy. Löytymättömyys voidaan todeta keskimäärin samalla levyhakujen määrällä. Tässä suhteessa rakenne on parempi kuin järjestämätön. tukee myös järjestysavaimeen perustuvia arvovälihakuja sekä erisuuruusvertailuja <,<= 14 Järjestyksen määrääviä avaimia voi olla kuitenkin vain yksi (voi olla monen sarakkeen yhdistelmä). Muiden tietojen perusteella haettaessa rakenne käyttäytyy kuten järjestämätön peräkkäisrakenne. Rakenne mahdollistaa binäärihaun käytön Binäärihaun 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 16 Binäärihaussa tarvitaan enintään roof(log 2 N) levyhakua. (roof(x) = pienin kokonaisluku, joka on suurempi kuin x) Aiemman esimerkin 8000 Opiskelija-tietueen tiedostossa oli 800 sivua. Olkoon opiskelijanumero järjestysavain. Tietueen haku sen 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 järjestämättömässä peräkkäisrakenteessa 5 ms +10*(5ms+0.2ms)=57ms (vs. peräkkäishaun 90 ms, jos löytyy, ja 180ms, jos ei löydy) Yllä kohdistusaika on laskettu vain kertaalleen, koska tiedosto mahtuu kahdelle vierekkäiselle sylinterille. Hakuvarren siirtoja kuitenkin tulee jonkin verran, joten käytännössä aika olisi hieman isompi ts ei oleellista eroa. Isommilla tiedostoilla binäärihaku parantaa asemaansa suhteessa koko tiedoston peräkkäiseen läpikäyntiin 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 18 Harri Laine 3

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 sivu. Yleensä solu kuitenkin muodostuu useasta sivusta enintään yhdestä kotisivusta ja joukosta ylivuotosivuja (tai jatkosivuja) ylivuotosivut voivat olla solukohtaisia tai jaettuja Solun osoitteena on joko kotisivun osoite (tällöin ei käytetä soluhakemistoa) tai soluhakemiston indeksi soluhakemisto on taulukko, jonka alkioina on kotisivujen osoitteita Mahdolliset soluosoitteet muodostavat osoiteavaruuden (address space) soluhakemistoa käytettäessä saadaan pienellä lisätilalla kasvatettua osoiteavaruutta moninkertaiseksi 19 20 A) Solun osoite on soluhakemiston indeksi (11) (19) soluhakemiston sivu B) Solun osoitteena on kotisivun osoite (11) Talletukseen varattu perustila - kotisivut sivu x solu 19 Tyhjille soluille varataan tilaa vain soluhakemiston alkion verran Soluhakemisto on haettava erikseen Tyhjätkin solut varaavat tilaa yhden sivun verran Ylivuotosivuille oma alueensa solu 11 Yleisimmin käytetty ratkaisu Sivut käyttävissä koti- tai ylivuotosivuiksi 21 22 Osoitteen laskentaan käytetään hajautusfunktiota (hajautinta) (hash function, randomizing function) Olkoon h(x) hajautusfunktio ja R K tietue, jonka hajautusavain on K Tällöin R K :n sijoitussolun osoite = h(k). Solujen sisällä tietueet sijoitetaan järjestämättömän peräkkäisrakenteen tapaan eli lisäykset loppuun 23 Optimitapauksessa tietue löytyy yhdellä levyhaulla eli solun kotisivulta*. 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 kotisivuille. * soluhakemistoa käytettäessä joudutaan satunnaisesti hakemaan myös soluhakemiston sivuja 24 Harri Laine 4

Haku avaimella K: lasketaan hajautusfunktiolla solun osoite s=h(k) jos käytössä on soluhakemisto haetaan kotisivun osoite sieltä p=h[s] (jos hakemistoalkio on tyhjä, haku päättyy) muuten käytetään kotisivun osoitteena solun osoitetta p=s. haetaan sivu p ellei tietuetta löydy sivulta käydään läpi solun muut sivut Jos hajautusavain ei ole tietueen yksikäsitteinen avain on haussa käytävä läpi kaikki solun sivut. 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 sivuhakuun tietuetta haettaessa B:n kokoon vaikuttavat mm. hajautusfunktio hajautusavaimen rakenne käytetäänkö soluhakemistoa, jolloin osoiteavaruuden koon kasvattaminen on kevyempää 25 26 Hajautusfunktio on tyypillisesti muotoa h(k) = toint(k) mod B missä toint(k) muuntaa hajautusavaimen kokonaisluvuksi Hyvältä hajautusfunktiolta edellytetään, että se jakaa hajautusavaimen arvot tasaisesti osoiteavaruuteen laskennan nopeus ei ole yhtä oleellista kuin keskusmuistihajautuksessa Edellä on käsitelty ns. staattista hajautusta. Käytössä voi olla myös jokin dynaaminen hajautusmenetelmä. Näissä osoiteavaruus ei pysy vakiona, vaan kasvaa tiedoston kasvaessa. Hajautukseen perustuvat rakenteet nopeuttavat hakua vain kyselyissä, joissa tietueita haetaan hajautusavaimeen perustuvan yhtäsuuruusehdon avulla. 27 28 Harri Laine 5