HELIA 1 (19) Luento 2: Tiedostot ja tiedon varastointi Muistit... 2 Päämuisti (Primary storage)... 2 Apumuisti (Secondary storage)... 2 Tiedon tallennuksen yksiköitä... 3 Looginen taso... 3 Fyysinen taso... 4 Yhteensovitus... 5 Tietueen koko... 6 Kentän koko... 6 Tietotyyppi... 7 Tiedosto-organisaatio ja saantimenetelmät... 8 Järjestämätön peräkkäistiedosto (Sequential file / Heap file)... 9 Järjestetty peräkkäistiedosto (Sorted file)... 10 Hajarakenne (Hash file)... 11 Indeksointi... 13 Päähakemisto (Primary index)... 15 Ryhmähakemisto / Järjestyshakemisto (Clustering index)... 16 Toisiohakemisto (Secondary index)... 17 Indeksoidut Peräkkäistiedostot (Indexed sequential files) 18 Tehtävä... 19
HELIA 2 (19) Muistit Päämuisti (Primary storage) Keskusmuisti Nopea Pieni Kallis Epäluotettava: Sisältö säilyy sähkön avulla (volatile) Kaikki tiedon käsittely tapahtuu keskusmuistissa Käsittelyä varten tiedot on noudettava apumuistista keskusmuistiin Kehitteillä on myös uusia ratkaisuja, jossa koko tietokanta voisi sijaita keskusmuistissa Apumuisti (Secondary storage) Muistivälineet Magneettilevyt Optiset levyt Magneettinauhat Suuri Hidas Halpa Luotettava: Sisältö säilyy sähkön saannista riippumatta (non-volatile)
HELIA 3 (19) Tiedon tallennuksen yksiköitä Looginen taso Tiedosto Joukko tietoja, jotka on tallennettu samaan paikkaan tietovälineellä ja jolla on nimi Esim. Osoitetiedosto Tiedosto koostuu yhdestä tai useammasta tietueesta Tietue Yhteen yksilöön, tapahtumaan tms. Liittyvät tiedot samassa yhteydessä esitettynä Esim. osoitetiedot Tietue koostuu yhdestä tai useammasta kentästä Kenttä Kenttä sisältää tietoalkion Tietoalkio = Pienin merkityksen omaava tiedon yksikkö Esim. postinumero
HELIA 4 (19) Fyysinen taso Bitti (Bit) Tietokoneen sisällä kaikki tieto esitetään 0 ja 1 koostuvina sarjoina ns. binäärilukuina Bitti pystyy tallentamaan yhden binäärinumeron siis bitin arvo voi olla joko 0 tai 1 Tavu (Byte) 8 bittiä Merkin tallennus vaatii 1-2 tavua ( 8-16 bit) Muistien koko ilmoitetaan yleensä tavuina A4:lle mahtuu n. 2 kilotavua (2 * 1024 tavua); yhteen megaan mahtuu siis n. 500 A4-arkkia Sana 1 tavu 8-bittisissä ympäristöissä 2 tavua 16-bittisissä ympäristöissä 4 tavua 32 bittisissä ympäristöissä 8 tavua 64-bittisissä ympäristöissä Sivu / Lohko (Page / Block) Yksikkö, joka siirretään kerrallaan apumuistista keskusmuistiin (ja päinvastoin) Fyysinen tietue Koko vaihtelee käyttöjärjestelmän ja laitteistoalustan mukaan
HELIA 5 (19) Yhteensovitus Tiedosto Tietue Sivu Kenttä Tavu Bitti Sivuun voi mahtua 1 tai useampi tietue, joskus tietue voi olla niin suuri, että sen tallennukseen tarvitaan useampi sivu Tietueen koko muodostuu kenttien kooista Kenttien koko ilmoitetaan tietotyypin (ja pituuden) avulla Tietotyyppi ja pituus ratkaisevat kentän tallennukseen tarvittavien tavujen määrän Tiedoston kuvaaja (File Header, File Descriptor) Sivujen osoitteet Tietueen kuvaus (kentät, pituudet, tyypit, järjestys, mahd. erotinmerkit)
HELIA 6 (19) Tietueen koko Kiinteämittainen tietue Tiedoston kaikki tietueet ovat saman mittaisia Kaikissa tietueissa on sama määrä kenttiä Vaihtuvamittainen tietue Tiedoston tietueet ovat eri mittaisia se. Tietueissa voi olla eri määrä kenttiä Kentän koko Kiinteämittainen kenttä Kentälle on määritelty kiinteä pituus Esim. char(30) Vaihtuvamittainen kenttä Kentän pituus voi vaihdella Esim. varchar(200)
HELIA 7 (19) Tietotyyppi Tietokoneessa kaikki tiedot, esitetään bittijonoina ja koneen kannalta bittijono on vain bittijono. Ihmisen / ohjelmoijan kannalta tietyt bittijonot esittävät kokonaislukuja, toiset desimaalilukuja, eräät merkkejä, siis tiedoilla on jokin tyyppi (type). Tietotyyppi määrittää millaisia arvoja tieto voi saada ja millaisilla operaatioilla sitä voi käsitellä Eri tiedonhallintajärjestelmät, sovelluskehittimet ja ohjelmointikielet tuntevat hieman erilaisia tietotyyppejä Tavallisimmat tietotyypit Teksti / merkkijono varchar / char/ Luku number Kokonaisluku integer Desimaaliluku decimal Päivämäärä date Totuusarvo boolean
HELIA 8 (19) Tiedosto-organisaatio ja saantimenetelmät Tiedosto-organisaatio Miten tiedot on fyysisesti järjestetty tiedostoon Saantimenetelmä Miten tietoja voidaan hakea tiedostoista ja tallentaa tiedostoihin Perustyypit 1. Peräkkäishaku 2. Suorasaanti Käytettävissä olevat saantimenetelmä riippuvat tiedoston organisointitavasta
HELIA 9 (19) Järjestämätön peräkkäistiedosto (Sequential file / Heap file) Yksinkertaisin organisointitapa Tietueet varastoidaan siinä järjestyksessä kuin ne ilmaantuvat Uusi tietue sijoitetaan tiedoston loppuun (viimeiselle sivulle) Jos sivulla ei ole tilaa, lisätään tiedostoon uusi sivu Poistetun tiedoston varaamaa tilaa ei käytetä uudestaan -> tiedostoalue reikiintyy Reikiintynyt tiedosto voidaan uudelleenorganisoida määräajoin Ainut saantimenetelmä on peräkkäishaku Lisääminen on tehokasta Tietyn tiedon haku hidasta (esim. tiedon lukua, päivitystä, poistoa varten) Suurten tietuemäärien luku nopeaa
HELIA 10 (19) Järjestetty peräkkäistiedosto (Sorted file) Tietueet lajitellaan yhden tai useamman kentän arvojen perusteella Tyypillisesti lajitteluperusteena käytetään pääavainta Tietueiden lisääminen ja poistaminen on järjestetyssä peräkkäistiedostossa ongelmallista, koska tietueiden järjestys on ylläpidettävä Tietyn tiedon haku puolitushakuna (esim. tiedon lukua, päivitystä, poistoa varten) Yleensä nopeampi kuin peräkkäishaku 2 4 6 8 15 19 20 22 25 27 Suurten tietuemäärien luku nopeaa (peräkkäishakuna) Järjestettyyn peräkkäistiedostoon liitetään usein indeksi (ks. Indeksoitu peräkkäistiedosto)
HELIA 11 (19) Hajarakenne (Hash file) Tietueita ei kirjoiteta tiedostoon peräkkäin Tietueet sijaitsevat satunnaisesti talletusalueella eli hajautusalueella Hajautusfunktio (Hash Function) laskee sivun johon tietue tallennetaan hajautuskentän perusteella (hash field) Hajautusalue on jaettu sankoihin (bucket) Bucketti koostuu yhdestä tai useammasta peräkkäisestä lohkosta Yhteen buckettiin mahtuu useampi tietue Hajautusfunktio valitaan siten, että tietueet jakautuvat tiedostossa mahdollisimman tasaisesti Ongelma on, että hajautusfunktiot eivät takaa uniikkiosoitetta Yhteentörmäys (Collision) syntyy, kun tietueilla on sama kotiosoite Myöhemmin tullut tietue, joka ei mahdu ko. bucketosoitteeseen sijoitetaan yleensä ylivuotoalueelle (overflow) Yhteentörmäyksien käsittelyyn on kehitetty erilaisia tekniikoita Vapaa osoitus (1 vapaa paikka) Ketjuttamaton ylivuoto Ketjutettu ylivuoto Monihajautus Autotiedosto Hajautin (=funktio)
HELIA 12 (19) 3 0011 Renault 4 0551 Toyota 1 0235 Audi Param. Os. 2 1011 Volvo Osoitin ylivuoto- 0551 alueelle Tietyn tietueen haku erittäin nopeaa, mikäli hajautusfunktion valinta on onnistunut (vain vähän yhteentörmäyksiä) Haku tietyn arvovälin mukaan hidasta Haku muun kuin hajautusavaimen mukaan hidasta Suuren tietuemäärän haku peräkkäishakuna
HELIA 13 (19) Indeksointi Indeksi on tietorakenne, joka mahdollistaa tietyn tietueen paikallistamisen nopeasti peräkkäistiedostosta Vrt. Kirjan hakemisto Datatiedosto (Data File)sisältää loogiset tietueet Hakemistotiedosto / Indeksitiedosto (Index File) sisältää indeksitietueet Indeksitiedoston tietueessa on 2 kenttää: 1. hakukenttä (Indexing Field) 2. osoitekenttä, jonka arvona on sen lohkon osoite, missä hakukenttää vastaava tietue sijaitsee Indeksitiedoston tietueet on järjestetty hakukentän (Indexing Field) mukaan (järjestetty peräkkäistiedosto) Autotiedosto Indeksi 1 1011 Volvo 0011 3 2 0235 Audi 0235 2 3 0011 Renault 0551 4 4 0551 Toyota 1011 1
HELIA 14 (19) Indeksitiedosto on yleensä huomattavasti pienempi kuin datatiedosto Indeksitiedostoa (tai osia siitä) voidaan säilyttää väliaikaisesti keskusmuistissa Joissakin ympäristöissä indeksi voidaan tallentaa puurakenteena (haku tehokkaampaa) Haku indeksoidun kentän mukaan nopeaa Uusien tietueiden lisäys ja poisto työläämpää Datatiedoston lisäksi päivitettävä indeksitiedostoa
HELIA 15 (19) Päähakemisto (Primary index) Datatiedosto on lajiteltu peräkkäistiedosto joka on järjestetty pääavaimen mukaan Pääindeksin hakukenttänä on datatiedoston avain Pääindeksin hakukentän arvot ovat uniikkeja / yksilöiviä Autotiedosto Pääindeksi 1 0011 Renault 0011 1 2 0235 Audi 0235 2 3 0551 Toyota 0551 3 4 1011 Volvo 1011 4 5 1200 Renault 1200 5...
HELIA 16 (19) Ryhmähakemisto / Järjestyshakemisto (Clustering index) Indeksin hakukenttä >< tiedostonavainkenttä Datatiedosto on järjestetty klusteri-indeksin hakukentän mukaan (ei siis pääavaimen mukaan) Klusteri-indeksin hakukentän ei tarvitse sisältää uniikkiarvoja, ts. useampi kuin yksi tietue voi vastata indeksin hakukentän arvoa Autotiedosto Klusteri-indeksi 1 0235 Audi Audi 1 2 0011 Renault Renault 2 3 1200 Renault Renault 3 4 0551 Toyota Toyota 4 5 1011 Volvo Volvo 5... Datatiedostolla voi olla vain yksi päähakemisto tai ryhmähakemisto!
HELIA 17 (19) Toisiohakemisto (Secondary index) Indeksi on määritelty datatiedoston kentästä, jonka mukaan datatiedostoa ei ole järjestetty (ei pääavaimen eikä klusteriavaimen mukaisesti) Toisiohakemiston hakukentän ei tarvitse sisältää uniikkiarvoja Toisioavaimeksi valitaan kenttä / kenttiä, joiden perusteella tietoa haetaan usein Esim. Henkilön nimi Autotiedosto Hakemisto 1 0011 Renault Audi 2 2 0235 Audi Renault 1 3 0551 Toyota Renault 5 4 1011 Volvo Toyota 3 5 1200 Renault Volvo 4...
HELIA 18 (19) Indeksoidut Peräkkäistiedostot (Indexed sequential files) Datatiedosto, jolle on määritelty pääindeksi Rakenne yhdistää peräkkäistiedoston ja suoratiedoston (hash file) saantimenetelmät 1. Peräkkäiskäsittely 2. Suorasaanti kohdistus suoraan yksittäiseen tietueeseen avaimen ja indeksin avulla
HELIA 19 (19) Tehtävä Dataa (järjestämätön peräkkäistiedosto) Lohkoosoite hlo_id sukunimi etunimi... 1 1001 Sato Satu... 1 4004 Neli Niilo... 2 2002 Kakkonen Pikku... 2 3003 Kolmonen Jaakko...... 1. Tee päähakemisto (-indeksi) (Miten käy datatiedostolle?) 2. Tee toisiohakemisto (-indeksi) sukunimen mukaan (Miten käy datatiedostolle?) 3. Tee klusterihakemisto (-indeksi) sukunimen mukaan (Miten käy datatiedostolle?)