T Transaktionhallinta tietokantajärjestelmissä

Koko: px
Aloita esitys sivulta:

Download "T-106.5220 Transaktionhallinta tietokantajärjestelmissä"

Transkriptio

1 Opetusmoniste T Transaktionhallinta tietokantajärjestelmissä Kevät 2009 (periodi III) Osa 1: Looginen tietokanta ja transaktiot Osa 2: Fyysinen tietokanta Osa 3: Lokin ylläpito ja puskurinhallinta Osa 4: Transaktioiden peruutus ja tietokannan elvytys häiriöstä Osa 5: Transaktioiden eristyvyys Osa 6: Transaktioiden samanaikaisuuden hallinta Osa 7: Muita transaktioiden hallintamenetelmiä

2 Looginen tietokanta ja transaktiot A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Fifth Edition. McGraw-Hill, 2006, sivut 22 23, luvun 1 (introduction) kohta kohta 1.9 (transaction management); sivut , luku 3 (SQL); sivut , luvun 4 (advanced SQL) kohta 4.4 (embedded SQL); sivut , luvun 15 (transactions) kohdat 15.1 (transaction concept) ja 15.2 (transaction state); sivut , luvun 20 (database-system architectures) kohta 20.1 (centralized and client-server architectures). Transaktiopalvelin, looginen tietokanta, tiedonmäärittely- ja tiedonkäsittelykieli SQL, loogisen tietokannan eheys, transaktiot, transaktioiden tilat, oikeellinen transaktio, transaktion ACID-ominaisuudet, luku-kirjoitusmalli, avainvälimalli, peruutuspisteet ja osittaisperuutus, monirakeisuus. Transaktiopalvelin Useimmat relaatiotietokannan hallintajärjestelmät ovat ns. transaktiopalvelimia (transaction server) eli kyselypalvelimia (query server). Transaktiopalvelin tarjoaa liittymän, jonka välityksellä asiakassovellukset voivat lähettää palvelimelle tietokantaoperaatioiden (kyselyiden ja päivitysten) suorituspyyntöjä. Palvelin palauttaa asiakkaalle operaation tuloksen. Pyynnöt voidaan määrittää SQL-kielellä tai erityisellä sovellusohjelmointiliittymällä (esim. JDBC, ODBC tms). Transaktiopalvelinjärjestelmän toimintatapaa kutsutaan transaktionkuljetukseksi (transaction shipping) eli kyselynkuljetukseksi (query shipping) eli funktionkuljetukseksi (function shipping). 1 2 Palvelimessa toimii yksi tai useampi (yleensä monisäikeinen) palvelinprosessi (server process). Joissakin järjestelmissä käytetään omaa palvelinprosessia kunkin käyttäjän istunnolle (asiakassovelluprosessille). Yleisempi lienee käytäntö, jossa yksi palvelinprosessi palvelee useampaa käyttäjää niin, että kullekin käyttäjälle on osoitettu yksi palvelinprosessin säie (thread). Prosessin kaikki säikeet toimivat rinnakkain samassa virtuaalimuistitilassa. Sovellusprosessin yhteys palvelimeen luodaan sulautettuun SQL-kieleen (embedded SQL) kuuluvalla lauseella connect to s, missä s on palvelimen tunniste (verkko-osoite). Lause luo sovellusprosessia palvelemaan uuden säikeen tai osoittaa tehtävään vapaana olevan säikeen. Looginen tietokanta Looginen tietokanta (logical database) on loogisen tietokantamallin (useimmiten relaatiomallin tai oliomallin) mukainen kokoelma tietoalkioita. Tällä kurssilla käsittelemämme loogiset tietokannat ovat relaatiotietokantoja. Looginen tietokanta on siten kokoelma relaatioita (relation) eli tauluja (table), jotka ovat monikoiden (tuple) eli rivien (row) monijoukkoja. Monijoukko (multiset, bag) on (järjestämätön) joukko, jossa sama alkio voi esiintyä useita kertoja. Relaation monikot ovat kaikki saman kaavion mukaisia, so. samantyyppisiä. Relaatiokaavio (relation schema) r(z) sisältää kaavion nimen r ja attribuuttien nimi- ja tyyppimääritykset Z kaavioon asetettuine eheysrajoitteineen (avain- ja viite-eheys- ym. rajoitteet). 3 4 Tietokantasovellus näkee tietokannan loogisena tietokantana ja operoi siihen loogisen tietokannan operaatioita käyttäen. Relaatiotietokannan loogisia operaatioita ovat (mm.): Uuden monikon t lisääminen relaatioon r. Monikon t poistaminen relaatiosta r. Relaation r monikon t attribuutin A arvon päivittäminen. Relaation r ehdon C täyttävän monikon t lukeminen. Uuden relaation r(z) luonti tietokantaan. Operaation syötteenä on relaatiokaavio. Operaatio on mahdollinen, mikäli tietokannassa ei ennestään ole r-nimistä relaatiota. Operaatio luo tyhjän relaation, johon sitten voi kohdistaa muita operaatioita. Tyhjän relaation r hävittäminen tietokannasta. Loogisiin operaatioihin kuuluvat lisäksi transaktioiden hallinnassa tarvittavat operaatiot: aloituskirjaus, sitoutumispyyntö, keskeytyspyyntö ja peruutuksen päättymiskirjaus. Tarkasteltava loogisten operaatioiden joukko kiinnitetään myöhemmin tarkemmin transaktiomallin (avainvälimallin) määrittelyn yhteydessä. Olennaista on määritellä jokainen päivitysoperaatio siten, että myös sen käänteis- eli peruutusoperaatio (inverse action, undo action) on selvästi määriteltävissä ja voidaan niin muodoin järjestelmän toimesta automaattisesti suorittaa tarvittaessa (kun päivitys pitää perua). Tämä johtaakin yleensä monikkokohtaisiin operaatioihin, joille käänteisoperaatio on itsestään selvä; esimerkiksi monikon lisäyksen käänteisoperaatio on monikon poisto (ja kääntäen). 5 6

3 Tiedonmäärittely- ja tiedonkäsittelykieli SQL Loogiset operaatiot tuotetaan tietokannan hallintajärjestelmän tiedonkäsittelykielen (data manipulation language, DML) ja tiedonmäärittelykielen (data definition language, DDL) lauseilla. Useimmiten tiedonkäsittely- ja määrittelykielenä käytetään SQL:ää. Tiedonmäärittelykieleen kuuluviksi luetaan lauseet, jotka päivittävät tietokannan tietohakemistoa eli järjestelmäluetteloa (data dictionary, system catalog), kuten create table ja drop table. Tiedonkäsittelykieleen luetaan lauseet, jotka lukevat tai päivittävät tietokantarelaatioiden sisältöä, kuten insert, delete ja update. SQL-kielen lauseet tuottavat seuraavanlaisia loogisia operaatioita: Monikon t lisäys relaatioon r: insert into r values (t) Yksilöivän avaimen X arvolla x varustetun monikon poistaminen relaatiosta r: delete from r where X = x. Ehdon C täyttävien monikoiden poistaminen relaatiosta r: delete from r where C (sarja monikoiden poisto-operaatioita). 7 8 Relaation r yksilöivän avaimen X arvolla x varustetun monikon attribuutin A arvon muuttaminen e:ksi: update r set A = e where X = x, missä e on mahdollisesti A:n tai muita r:n attribuutteja sisältävä lauseke. Mikäli e sisältää A:n tai muita r:n attribuutteja, lause tuottaa avaimen X arvolla x varustetun monikon (x,v) lukuoperaation ja sitä seuraavan päivitysoperaation, jossa arvo v muutetaan e:n arvoksi. Mikäli e ei sisällä r:n attribuutteja, lause tuottaa vain päivitysoperaation. Relaation r ehdon C täyttävien monikoiden attribuutin A arvon muuttaminen e:ksi: update r set A = e where C. Lause tuottaa sarjan monikoiden päivitysoperaatioita (mikäli e ei sisällä r:n attribuutteja) tai sarjan luku- ja päivitysoperaatioiden pareja (mikäli e sisältää r:n attribuutin). Relaation r(z) ehdon C täyttävien monikoiden t projektiomonikoiden t[y ] lukeminen, kun Y Z, so. attribuuttijoukko Y on kaavion attribuuttijoukon Z osajoukko: select Y from r where C (sarja monikoiden lukuoperaatioita). Relaation r(z) luonti: create table r(z), missä Z on kaavion attribuuttien ja eheysrajoitteiden määrittely SQL:llä Loogisen tietokannan eheys Relaation r hävittäminen tietokannasta: drop table r. Mikäli r on tyhjä, lause tuottaa yhden loogisen operaation: hävitä tyhjä relaatio r tietokannasta. Mikäli r on epätyhjä, sisältönään monikot t 1,...,t n, lause tuottaa operaatiosarjan: poista monikko t 1 relaatiosta r; poista monikko t 2 relaatiosta r;... poista monikko t n relaatiosta r; hävitä tyhjä relaatio r tietokannasta. 11 Looginen tietokanta (tai oikeammin sen tila) on eheä (integral, consistent), jos se täyttää tietokannan kaavion sisältämät tyyppi- sekä rajoitemääritykset sekä muut tietokannalle asetetut eheysrajoitteet (integrity constraint). Relaatiotietokannassa kunkin relaation monikoiden attribuuttiarvojen tulee olla oikeaa tietotyyppiä ja relaation tulee toteuttaa kaavion avainrajoitteet (key constraint) eli (SQL:n) pääavainrajoitteet (primary key) ja yksilöivyysrajoitteet (unique). Relaatioiden välille määriteltyjen viite-eheysrajoitteiden (referential integrity constraint) eli (SQL:n) viiteavainrajoitteiden (foreign key) tulee niin ikään olla voimassa. SQL:llä tietokannan kaavioon määriteltävissä olevien eheysrajoitteiden lisäksi loogiseen tietokantaan liittyy yleensä sovellusaluekohtaisia rajoitteita, joiden tarkistaminen ja voimassa pysyttäminen on tietokantaa käyttävien sovellusten tehtävänä. 12

4 Transaktiot Loogisen tietokannan D transaktio eli tietokantatapahtuma (transaction) on D:hen kohdistuva loogisten tietokantaoperaatioiden sarja, jonka vaikutusten halutaan muodostavan yhden atomisen (so. jakamattoman) kokonaisuuden. Tietokantasovelluksen ohjelmoija merkitsee ohjelmaan transaktioiden rajat: transaktio alkaa aloituskirjauksella (begin) ja päättyy sitoutumispyyntöön (commit) tai keskeytys- ja peruutuspyyntöön (abort tai rollback). SQL:ssä ei eksplisiittistä transaktion aloitusoperaatiota ole, vaan uuden transaktion katsotaan alkavan ensimmäisestä tietokantaoperaatiosta, joka ei vielä kuulu mihinkään transaktioon. Tarkastellaan relaatiota r(x,v ), missä attribuutti V on numeerinen. Millaisen transaktion tuottaa asiakassovellusohjelman osan exec sql update r set V = 2 V ; exec sql select sum(v ) from r; exec sql commit; suoritus, kun relaation r sisältönä suoritushetkellä on monikkojoukko {t 1,...,t n } (ja kun tätä ennen suoritettiin viimeksi SQL-lause commit tai rollback)? Asiakasprosessi lähettää palvelimelle yksitellen kunkin kolmen operaation (update, select, commit) suorituspyynnön jääden kunkin pyynnön jälkeen odottamaan vastausta update-operaation suorituspyyntö tuottaa palvelimella seuraavan operaatiojonon: aloita uusi transaktio T 1 ; lue relaation r ensimmäinen monikko t 1 ; päivitä t 1 :n V -attribuutin arvo v 1 kertomalla se kahdella; lue relaation r toinen monikko t 2 ; päivitä t 2 :n V -attribuutin arvo v 2 kertomalla se kahdella;... lue relaation r viimeinen monikko t n ; päivitä t n :n V -attribuutin arvo v n kertomalla se kahdella. Vastausviestinä on tieto update-operaation onnistumisesta. Koska SQL:n update r -lauseen tai select sum(v ) -kyselyn semantiikka ei kiinnitä r-monikoiden läpikäyntijärjestystä, palvelin valitsee tehokkuuden kannalta edullisimman, mikä arvattavasti on monikoiden fyysinen peräkkäisjärjestys r:n tiedostossa. select-operaation suorituspyyntö tuottaa palvelimella seuraavan operaatiojonon: lue relaation r ensimmäinen monikko t 1 ; lue relaation r toinen monikko t 2 ;... lue relaation r viimeinen monikko t n. Palvelin palauttaa asiakasprosesille operaation onnistumisviestin lisäksi myös operaation tuloksen (lasketun summan). Vastauksena commit-pyyntöön palvelin sitouttaa transaktion T 1, mikäli mahdollista, ja palauttaa sitoutumisen onnistumisesta tiedon sovellusprosessille Transaktiolta vaadittava ominaisuus atomisuus (atomicity) tarkoittaa, että joko (1) kaikki transaktion aikaansaamat muutokset loogisen tietokannan tilaan toteutuvat tai (2) yksikään muutos ei jää voimaan loogiseen tietokantaan. Transaktio, joka on suorittanut loppuun commit-operaation, on sitoutunut (committed). Sitoutuneelta transaktiolta vaaditaan atomisuuden lisäksi ominaisuus pysyvyys (durability), mikä tarkoittaa, että sitoutuneen transaktion aikaansaamien muutosten on toteuduttuva ja jäätävä pysyvästi voimaan loogiseen tietokantaan, mahdollisista häiriöistä huolimatta. Sitoutuneen transaktion tekemät päivitykset voi kumota ainoastaan ohjelmoimalla sitä varten uusi transaktio (tai uusia transaktioita). Esimerkkitransaktiomme T 1 päivittää relaation r kaikkien monikoiden V -attribuutin arvon kertomalla entisen arvon kahdella. Mikäli T 1 siis sitoutuu, r:n kaikkien monikoiden V -attribuutin päivityksen on jäätävä voimaan. Jos taas T 1 ei sitoudu esim. järjestelmähäiriön vuoksi, on r:n kaikkien monikoiden V -attribuutin arvojen jäätävä entiselleen, so. kahdella kertomatta. Päivitettyjen monikoiden V -arvot täytyy palauttaa ennalleen

5 Transaktioiden tilat Edellä määritelty transaktiokäsite sisältää vain sitoutuneen transaktion, so. transaktion, joka koostuu loogisten operaatioiden sarjasta BαC, missä B on transaktion aloituskirjaus (begin), α on jono normaaleja lukuja päivitysoperaatioita ja C on transaktion sitoutumispyyntö (commit). Operaatiojono α muodostaa transaktion etenemisvaiheen (forward-rolling phase). Transaktiota suoritetaan kuitenkin operaatio kerrallaan, ja transaktio ei välttämättä koskaan pääty sitoutumiseen, vaan voi sen sijaan joko itse keskeyttää ja peruuttaa itsensä (SQL-lauseella rollback) tai keskeytyä transaktiosta riippumattomasta syystä (esim. järjestelmähäiriöstä), jolloin järjestelmä peruuttaa transaktion tietokannan elvytysvaiheessa. Erotammekin neljä eri transaktiotyyppiä eli transaktion tilaa (transaction state): (1) etenevä transaktio, (2) sitoutunut transaktio, (3) peruuntuva transaktio ja (4) peruuntunut transaktio. Etenevä transaktio (forward-rolling transaction) koostuu operaatiosarjasta Bα, missä B on transaktion aloituskirjaus ja α jono etenemisvaiheen luku- ja päivitysoperaatioita eli ns. etenemisoperaatioita (forward action). Etenevää transaktiota voidaan edistää normaaleilla luku- ja päivitysoperaatioilla sekä sitoutumis- tai keskeytyspyynnöllä Peruuntuva transaktio (backward-rolling transaction) koostuu operaatiosarjasta BαβAβ 1, missä B on transaktion aloituskirjaus, αβ jono etenemisvaiheen luku- ja päivitysoperaatioita, A on transaktion keskeytyskirjaus (abort) ja β 1 on etenemisvaiheen operaatiojonon αβ loppuosan β peruutusjono. Operaatiojono β 1 muodostaa transaktion peruutusvaiheen (backwardrolling phase). Peruuntuva transaktio on peruuttanut loppuosan β etenemisvaiheen operaatioistaan; alkuosa α on vielä peruuttamatta. Etenemisvaiheen operaatiojonon β peruutusjono β 1 eli undo(β) koostuu β:n sisältämien päivitysoperaatioiden jonon o 1 o 2...o n operaatioiden o i käänteisoperaatioista o 1 i käänteisessä järjestyksessä o 1 n o 1 n 1...o 1 1. Etenemisvaiheen päivitysoperaation o käänteisoperaatio (inverse action) eli peruutusoperaatio (backward action) o 1 eli undo(o) määritellään operaatiokohtaisesti: undo(monikon t lisääminen r:ään) = monikon t poistaminen r:stä. undo(monikon t poistaminen r:stä) = monikon t lisääminen r:ään. undo(r:n monikon t attribuutin A arvon u päivittäminen v:ksi) = r:n monikon t attribuutin A arvon v päivittäminen u:ksi. undo(relaation r(z) luonti tietokantaan) = tyhjän relaation r(z) hävittäminen tietokannasta. undo(tyhjän relaation r(z) hävittäminen tietokannasta) = relaation r(z) luonti tietokantaan Toisin kuin etenevää transaktiota, peruuntuvaa transaktiota ei voida edistää mielivaltaisesti, vaan seuraavaksi suoritettava operaatio on aina tarkasti määrätty: seuraavaksi suoritetaan etenemisvaiheen viimeisen vielä peruuttamatta olevan päivitysoperaation käänteisoperaatio. Kun kaikki etenemisvaiheen päivitykset on peruutettu, kirjataan transaktio peruuntuneeksi. Peruuntunut transaktio eli peruutuksensa päättänyt transaktio (rolledback transaction) koostuu operaatiosarjasta: BαAα 1 C, missä B on transaktion aloituskirjaus, α jono etenemisvaiheen luku- ja päivitysoperaatioita, A on transaktion keskeytyskirjaus, α 1 on etenemisvaiheen operaatiojonon α peruutusjono ja C on transaktion peruutuksen päättymiskirjaus (rolled-back). Peruuntunut transaktio on siis peruutusvaiheensa α 1 tuloksena peruuttanut etenemisvaiheensa α kokonaan. 23 Peruuntuneella transaktiolla ei ole mitään vaikutusta loogisen tietokannan tilaan. Fyysisen tietokannan tila ei sitä vastoin välttämättä palaudu peruutuksessa entiselleen. Sitoutunut tai peruuntunut transaktio on päättynyt (terminated). Päättynyttä transaktiota ei enää voi edistää millään operaatiolla. Etenevä tai peruuntuva transaktio on aktiivinen (active). Peruuntuva tai peruuntunut transaktio on keskeytynyt (aborted). 24

6 Oikeellinen transaktio Tietokantasovelluksen laatijan tehtävänä on huolehtia siitä, että jokainen sovellusprosessin tuottama sitoutunut transaktio T on loogisesti oikeellinen (logically consistent): T säilyttää eheän loogisen tietokannan eheänä, kun T ajetaan yksinään häiriöttömässä tilassa. Transaktiot on luonnollisesti voitava ohjelmoida ottamatta huomioon fyysisen tietokannan rakennetta, muita samanaikaisia transaktioita sekä järjestelmähäiriöitä. Tietokannan hallintajärjestelmän tehtävänä on taata sekä loogisen että fyysisen tietokannan eheyden säilyminen, vaikka suorituksessa on samanaikaisesti useita loogisesti oikeellisia transaktioita ja järjestelmähäiriöitä voi esiintyä. Peruuntunut transaktio on aina triviaalisti loogisesti oikeellinen, tehtiinpä sen etenemisvaiheessa mitä tahansa ja olivatpa tietokannan eheysrajoitteet millaisia hyvänsä: peruutusvaihe joka tapauksessa peruuttaa kaikki etenemisvaiheen päivitykset. Etenevän transaktion ei ole tarpeen olla oikeellinen, ts. transaktion ei kaikissa etenevissä tiloissaan tarvitse olla oikeellinen: sellaisten eheysrajoitteiden, joiden voimassaolo tarkistetaan vasta transaktion sitoutumispisteessä, ei tietenkään tarvitse olla voimassa transaktion sisältämän päivitysoperaatiosarjan keskellä. Viimeistään juuri ennen sitoutumistaan transaktion on kuitenkin saatettava eheysrajoitteet voimaan Transaktion ACID-ominaisuudet Edellä on tullut määritellyksi kolme transaktioilta vaadittavista ACIDominaisuuksista: Atomisuus (atomicity): transaktion kaikki päivitykset jäävät voimaan tai mikään niistä ei jää voimaan; ominaisuutta ylläpitää järjestelmä. Oikeellisuus (consistency): transaktio (yksin häiriöttömässä tilassa suoritettuna) säilyttää eheän loogisen tietokannan eheänä; ominaisuutta ylläpitää transaktion ohjelmoija. Pysyvyys (durability): sitoutuneen transaktion päivitykset jäävät tietokantaan pysyvästi; ominaisuutta ylläpitää järjestelmä. Neljäs ominaisuus on: Eristyvyys (isolation): transaktiosta näyttää, ettei sen kanssa ole suorituksessa samanaikaisesti muita samoihin tietoalkioihin operoivia transaktioita; ominaisuutta ylläpitää järjestelmä. Luku-kirjoitusmalli Transaktionhallinnan yksityiskohtaista tarkastelua varten on tarpeen kiinnittää se tietokanta- ja transaktiomalli, jonka mukaisista operaatioista transaktiot koostuvat. Oletamme yksinkertaisuuden vuoksi, että looginen tietokantamme koostuu yhdestä kaavion r(xv ) mukaisesta relaatiosta. Relaation monikot ovat pareja (x, v), missä x on monikon yksilöivä avainarvo ja v on monikon arvo (so. monikon muiden attribuuttien arvot). Transaktiot operoivat r:n monikoihin (x,v) aina avainarvon x perusteella. Yksikertaisimmassa transaktiomallissa, ns. luku-kirjoitusmallissa (readwrite model) tietokannan r transaktio voi sisältää seuraavia operaatioita: B: transaktio alkaa (begins). R[x, v]: luetaan avainarvolla x varustettu monikko (x, v). Syöteparametrina annetaan avainarvo x. Operaatio hakee r:stä monikon (x, v). Jos monikkoa ei löydy, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin R[x]. W[x,u,v]: kirjoitetaan avainarvolla x varustettu monikko. Syöteparametrina annetaan avainarvo x ja arvo v. Operaatio korvaa relaatiossa r olevan, avainarvolla x varustetun monikon arvon u arvolla v. Jos monikkoa ei löydy, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin W[x,v] tai W[x]. C: etenevä transaktio sitoutuu (commits) tai keskeytynyt transaktio päättää peruutuksensa (completes its rollback). Esim. operaatiojono BR[x,u]R[y,v]W[z,w,u + v] on etenevä transaktio, joka lukee avainarvoilla x ja y varustettujen monikoiden arvot u ja v ja sijoittaa summan u+v avainarvolla z varustetun monikon arvoksi, kun avainarvolla z varustetun monikon entinen arvo on w. Operaatiojono on sitoutunut transaktio. BR[x,u]R[y,v]W[z,w,u + v]c A: transaktio keskeytyy (aborts)

7 Keskeytyneen transaktion peruutusvaiheessa suoritetaan etenemisvaiheen kirjoitusoperaatioiden käänteisoperaatiot (käänteisessä järjestyksessä). Operaation W[x,u,v] käänteisoperaatio W 1 [x,u,v] on W[x,v,u]. Operaatiojono BR[x,u]R[y,v]W[z,w,u + v]aw 1 [z,w,u + v] on peruuntuva keskeytynyt transaktio, joka on peruuttanut (ainoan) kirjoitusoperaationsa. Operaatiojono BR[x,u]R[y,v]W[z,w,u + v]aw 1 [z,w,u + v]c on peruutuksensa päättänyt keskeytynyt transaktio. Luku-kirjoitusmallissa ei voi esittää monikoiden lisäyksiä eikä poistoja. Kun kirjallisuudessa tarkastellaan luku-kirjoitusmalliin perustuvaa transaktionhallintaa, operaatioiden kohteina ovat monikoiden sijasta tarkemmin määrittelemättömät abstraktit tietoalkiot. Jos tietoalkioiksi valitaan loogisen tietokannan monikkokokoelmat, esim. relaatiotietokannan relaatiot, on mahdollista mallintaa monikoiden lisäykset ja poistot kyseisen kokoelman (relaation) kirjoitusoperaatioina. Vastaavasti jos tietoalkioiksi valitaan fyysisen tietokannan sivut, joille relaatioiden monikoita sijoitetaan, on mahdollista mallintaa monikoiden lisäykset ja poistot kyseisen sivun kirjoitusoperaatioina. Transaktio on kumminkin loogiseen tietokantaan liittyvä käsite, joten sen mallintaminen fyysisen tietokannan käsittein ei ole asianmukaista Kummassakin tapauksessa transaktionhallinta on varsin karkearakeista: lokiin on kirjattava kokonaisen relaation tai sivun muutoskirjauksia, ja samanaikaisuuden hallinnan synkroinointiyksikkönä, lukittavana kokonaisuutena, on kokonainen relaatio tai sivu. Nykyaikaisissa tietokannan hallintajärjestelmissä lokikirjaukset ja lukittavat kokonaisuudet ovat hienojakoisimmillaan yksittäisiä monikoita, jolloin transaktion T 1 päivittämää sivua voi toinen transaktio T 2 päivittää T 1 :n ollessa vielä aktiivisena. Transaktion T 2 aiheuttaman rakennemuutoksen seurauksena transaktion T 1 sivulla p päivittämä monikko voi siirtyä toiselle sivulle p transaktion T 1 ollessa vielä aktiivinen. Avainvälimalli Avainvälimalliksi (key-range model) kutsumassamme transaktiomallissa lukuoperaatiot ovat selausoperaatioita, joissa haetaan relaatiosta r avainarvojen suuruusjärjestyksessä ensimmäinen monikko tietyltä avainväliltä (key range). Mallin päivitysoperaatiot ovat monikoiden lisäyksiä ja poistoja. Monikoiden avainarvojen joukon oletetaan olevan täydellisesti järjestetty; järjestystä merkitään ja sen käänteisrelaatiota ; vastaavia epärefleksiivisiä järjestysrelaatioita merkintään tuttuun tapaan < ja >. Pienintä avainarvoa merkitään ja suurinta. Oletamme, etteivät nämä esiinny tietokannan missään monikossa Avainvälimallissa tietokannan r transaktio voi sisältää seuraavia operaatioita: B: transaktio alkaa (begins). Avainvälimalli on riittävä kuvaamaan tärkeimmät periaatteet, joita käytetään ns. fysiologisessa (fyysis-loogisessa) lokiperustaisessa elvytyksessä sekä monikkotason samanaikaisuuden hallinnassa (yksilöivän avaimen avainvälilukinta). Mallissa voidaan myös luontevasti esittää samanaikaisista avainväliselauksista ja yksittäisten monikoiden lisäyksistä ja poistoista johtuvat eristyvyysanomaliat (mm. haamuilmiö). R[x, z, v]: luetaan ensimmäinen hakuehdon täyttävä monikko (retrieve first tuple) (x, v). Syöteparametrina annetaan avainarvo z, z <. Operaatio hakee sen monikon (x,v), jonka avainarvo x on pienin ehdot x z ja (x,v) r täyttävä. Jos tällaista ei ole, palautetaan (, 0). Operaatiota voidaan merkitä lyhyemmin R[x, z], R[x, v] tai R[x]. R[x, >z, v]: luetaan seuraava monikko (retrieve next tuple) (x, v). Syöteparametrina annetaan avainarvo z, z <. Operaatio hakee sen monikon (x,v), jonka avainarvo x on pienin ehdot x > z ja (x, v) r täyttävä. Jos tällaista ei ole, palautetaan (, 0). Operaatiota voidaan merkitä lyhyemmin R[x,>z], R[x,v] tai R[x]

8 I[x, v]: lisätään monikko (insert tuple) (x, v). Syöteparametrina annetaan avainarvo x ja arvo v. Operaatio lisää monikon (x, v) relaatioon r. Mikäli r sisältää ennestään avainarvolla x varustetun monikon, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin I[x]. D[x, v]: poistetaan monikko (delete tuple) (x, v). Syöteparametrina annetaan avainarvo x. Operaatio etsii relaatiosta r avainarvolla x varustetun monikon (x, v) ja poistaa sen. Jos monikkoa ei löydy, operaatio epäonnistuu. Operaatiota voidaan merkitä lyhyemmin D[x]. C: etenevä transaktio sitoutuu (commits) tai keskeytynyt transaktio päättää peruutuksensa (completes its rollback). A: transaktio keskeytyy (aborts). Lisäys- ja poisto-operaatioille o[ x] määritellään käänteisoperaatio o 1 [ x] seuraavasti: I 1 [x,v] = D[x,v]. D 1 [x,v] = I[x,v]. Esim. peruuntunut transaktio BR[x 1, x,v 1 ]R[x 2,>x 1,v 2 ]R[x 3,>x 2,v 3 ]D[x,v]I[x,v 1 + v 2 + v 3 ] AI 1 [x,v 1 + v 2 + v 3 ]D 1 [x,v]c = BR[x 1, x,v 1 ]R[x 2,>x 1,v 2 ]R[x 3,>x 2,v 3 ]D[x,v]I[x,v 1 +v 2 +v 3 ] AD[x,v 1 + v 2 + v 3 ]I[x,v]C lukee kolmen peräkkäisillä avainarvoilla varustetun monikon arvon, korvaa avainarvolla x varustetun monikon arvon luettujen monikoiden arvojen summalla, keskeytyy, peruuttaa päivityksensä ja päättää peruutuksensa Peruutuspisteet ja osittaisperuutus SQL:n transaktiomallissa on mahdollista ns. osittaisperuutus (partial rollback), jolla peruutetaan osa etenevän transaktion tekemistä päivityksistä peruuttamatta koko transaktiota. Osittaisperuutuksen jälkeen transaktio on edelleen etenevässä tilassa ja voi siis suorittaa uusia etenemisvaiheen operaatioita. Osittaisperuutuksessa peruutettava etenemisvaiheen osa määrätään määrittelemällä transaktion sisälle peruutuspisteitä (savepoint) SQL:n lauseella set savepoint P, missä P on peruutuspisteelle annettava nimi. SQL:n lauseella rollback to savepoint P palataan peruutuspisteeseen P, so. perutaan kaikki pisteen P jälkeen suoritetut (vielä perumatta olevat) etenemisvaiheen päivitykset. Osittaisperuutukset voivat olla sisäkkäisiä: insert into r values (x 1,v 1 ); set savepoint P 1 ; insert into r values (x 2,v 2 ); set savepoint P 2 ; insert into r values (x 3,v 3 ); rollback to savepoint P 2 ; insert into r values (x 4,v 4 ); rollback to savepoint P 1 ; insert into r values (x 5,v 5 ); commit. Lause rollback to savepoint P 2 poistaa relaatiosta r siihen lisätyn monikon (x 3,v 3 ). Lause rollback to savepoint P 1 poistaa relaatiosta r siihen lisätyt monikot (x 4,v 4 ) ja (x 2,v 2 ). Transaktion lopputuloksena relaatiossa r on siis monikot (x 1,v 1 ) ja (x 5,v 5 ) Lisätään transaktiomalliimme (avainvälimalliin) osittaisperuutukset. Tätä varten transaktiomalliin lisätään seuraavat operaatiot: S[P]: asetetaan peruutuspiste (set savepoint) P. A[P]: aloitetaan osittaisperuutus pisteeseen (begin partial rollback to savepoint) P. C[P]: päätetään osittaisperuutus pisteeseen (complete the partial rollback to savepoint) P. 41 Transaktion etenemisvaihe voi nyt olla mitä tahansa seuraavista muodoista: 1. Jono α operaatioita R, I, D ja S. 2. Muotoa αs[p]βa[p]β 1 C[P]γ oleva operaatiojono, missä α, β ja γ ovat muotoa (1) tai (2). 3. Muotoa αs[p]βδa[p]δ 1 oleva operaatiojono, missä α, β ja δ ovat muotoa (1) tai (2). Tapauksessa 2 osajono S[P]βA[P]β 1 C[P] esittää päätettyä peruutusta pisteeseen P. Tapauksessa 3 osajono S[P]βδA[P]δ 1 ilmaisee, että transaktio on parhaillaan peruuttamassa pisteeseen P. Operaatiojonon α peruutusjono (undo string) α 1 eli undo(α) määritellään nyt sen mukaan, minkä muotoinen se on: Muotoa 1 olevalle jonolle α peruutusjono α 1 määritellään kuten aiemmin. Muotoa 2 olevan jonon peruutusjono on γ 1 α 1. Muotoa 3 olevan jonon peruutusjono on β 1 C[P]α 1. 42

9 Monirakeisuus Lisätään tietokanta- ja transaktiomalliin monirakeisuutta (multiple granularity) niin, että monikoita voidaan ryhmitellä relaatioiksi. Tietokannan relaatiot muodostavat tunnisteidensa mukaan täydellisesti järjestetyn joukon {(r 1,R 1 ),...,(r ni,r ni )}, missä r i on relaation yksilöivä tunniste ja R i on relaation kaavio (= X i V i ). Relaation r monikon (x,v) yksilöi pari (r,x). Monikkokohtaiset operaatiot ovat nyt: R[r, x, θ z, v]: relaation r monikon (x, v) lukeminen. I[r,x,v]: monikon (x,v) lisääminen relaatioon r. Uusia operaatioita ovat: R[r,θr,R ]: relaation r kaavion selailu. I[r,R]: uuden relaation r(r) luonti tietokantaan; vastaa SQL:n operaatiota create table r(r). D[r, R]: (tyhjän) relaation r poistaminen tietokannasta; vastaa SQL:n operaatiota drop table r. Lisää rakeisuustasoja saataisiin ryhmittelemällä relaatioita edelleen (eri omistajien) tietokannoiksi, jolloin uusina operaatioina saataisiin mm. vastineet SQL:n create database ja destroy database -operaatioille. D[r,x,v]: monikon (x,v) poistaminen relaatiosta r

10 Fyysinen tietokanta A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Fifth Edition. McGraw-Hill, 2006, sivut 24 26, luvun 1 (introduction) kohta 1.11 (database architecture); sivut , luvun 11 (storage and file structure) kohdat 11.5 (storage access), 11.6 (file organization), 11.7 (organization of records in files) ja 11.8 (data dictionary storage); sivut , luvun 17 (recovery system) kohta 17.6 (buffer management); sivut , luvun 20 (database-system architectures) kohta (transaction-server process structure). Transaktiopalvelimen tietokokoelmat, transaktiopalvelimen prosessit, levyjaksot ja sivut, monikkotunniste, tiedostot ja segmentit, tietokantasivujen puskurointi, sivujen naulinnat SQL-operaation suorituksessa, naulintakutsun suoritus, tietokannan tila, tietokannan elvytys ja tarkistuspisteet, tiedoston vapaan tilan hallinta, fyysisen tietokannan eheys, salpauskäytäntö, konttauskäytäntö, fyysisen tietokannan rakennemuutokset, uuden sivun varaus tietokantarakenteeseen. 1 2 Transaktiopalvelimen tietokokoelmat Transaktiopalvelimella ylläpidetään kahta pysyvää tietokokoelmaa: Tietokannan relaatiot ja niiden hakemistot (index) sekä tietohakemistorelaatiot (system catalog, data dictionary) sisältävät tietolevyt (data disk). Tietokannan päivityksien lokikirjauksista koostuvat lokilevyt (log disk). Järjestelmän ollessa toiminnassa ylläpidetään mm. seuraavia katoavia rakenteita palvelimen eri prosessien yhteisessä keskusmuistissa (virtuaalimuistissa): Puskuriallas (buffer pool) eli tietokantapuskuri (database buffer) tietokantasivujen käsittelyä varten. Lokipuskuri (log buffer) lokitiedoston käsittelyä varten. Lukkotaulu (lock table) transaktioiden samanaikaisuuden hallintaa varten. Kyselysuunnitelmavälimuisti (query-plan cache), jossa säilytetään valmiiksi käännettyjä kyselysuunnitelmia (suoritussuunnitelmia), joita voidaan käyttää uudelleen, kun sama kysely tulee järjestelmään uudestaan. 3 4 Transaktiopalvelimen prosessit Yhteisessä muistissa säilytettävään tietoon operoi useita prosesseja: Jo aiemmin mainittuja palvelinprosesseja (server process) ja niiden säikeitä, jotka tuottavat sovellusprosessien lähettämien pyyntöjen perusteella transaktioita. Tietokannankirjoitusprosessi (database-writer process), joka vie päivitettyjä tietokantasivuja puskurialtaasta takaisin levylle. Lokinkirjoitusprosessi (log-writer process), joka vie lokikirjauksia lokipuskurista lokilevylle silloin, kun lokipuskuri täyttyy tai kun palvelinprosessi (transaktion sitoutumisen yhteydessä) pyytää lokin pakotusta levylle. Tarkistuspisteprosessi (checkpoint process) ottaa aika-ajoin ns. tarkistuspisteen, jossa eräitä katoavia tietoja viedään levylle. Prosessien valvontaprosessi (process-monitor process), joka valvoo järjestelmän muita prosesseja ja suorittaa romahtaneen prosessin vaatimat elvytystoimenpiteet, kuten keskeyttää ja peruuttaa suoritusvirheeseen päättyneen palvelinprosessin säikeen tuottaman transaktion. Lukkojenhallintaprosessi (lock-manager process), joka palvelee lukon varaus- ja vapautuspyyntöjä sekä huolehtii lukkiumien havaitsemisesta. 5 6

11 Levyjaksot ja sivut Prosessien välisten viestien vähentämiseksi useissa järjestelmissä palvelinprosessit toteuttavat lukituksen päivittämällä lukkotaulua suoraan eikä lähettämällä pyyntöjä lukkojenhallintaprosessille. Lukkotaulu täytyy silloin suojata keskinäisen poissulkemisen mekanismilla (semaforilla) kuten muutkin usean prosessin yhteiskäytössä olevat muistirakenteet. Fyysinen tietokanta (physical database) on levymuistiin sijoitettu kokoelma sivuja, jotka sisältävät tietueita. Sivu (page) on vakiokokoinen (joko 2, 4, 8, 16 tai 32 kilotavun) alue, joka on sijoitettu levymuistin yhteen jaksoon (tai useampaan peräkkäiseen jaksoon, mikäli sivu on jaksoa pitempi). Levyjakso eli -lohko (disk block) on yhdestä tai useammasta peräkkäisestä sektorista koostuva alue levypinnan uralla. Esim. jos jakson koko on 8 KB ja sektorin koko on 512 B, käsittää jakso 16 peräkkäistä sektoria. Levyllä yksittäinen sektori on pienin osoitettavissa oleva yksikkö. Sivun tuonti levyltä keskusmuistiin ja sivun vienti keskusmuistista levylle toteutetaan yhdellä levyoperaatiolla (yksi hakuvarren asetus ja sivuun kuuluvien peräkkäisten sektorien luku tai kirjoitus). 7 8 Looginen tietokanta toteutetaan fyysisen tietokannan avulla sijoittamalla tietokannan relaatioiden monikot sivuille. Monikoita sisältävää sivua kutsutaan tietosivuksi (data page). Tietosivujen lisäksi tarvitaan mm. tiedostorakenteesta riippuva joukko hakemisto- eli indeksisivuja (index page), joiden kautta tietosivuihin päästään tehokkaasti käsiksi. Tietokannan hallinnan tarpeisiin on vielä erinäisiä muita sivutyyppejä. Monikko toteutetaan tietosivulla yleensä yhtenä tietueena. Sivua pitempi monikko joudutaan jakamaan useaksi tietueeksi, jotka ketjutetaan toisiinsa. Sivulla on otsikkotietue, tietuealue ja tietuehakemisto. Sivun alun otsikkotietue (header) sisältää ainakin seuraavat tiedot: Sivun tyyppi, esim. relaatiotietosivu (relation data page, rivejä yhdestä relaatiosta), rypään tietosivu (cluster data page, toisiinsa liittyviä rivejä useasta relaatiosta), hakemistosivu (index page, relaation hakemistoon eli indeksiin kuuluva sivu), vapaata tilaa (free space, unallocated page), tietohakemistosivu (data-dictionary page), varauskuvaajasivu (storage-map page),... Relaation, hakemiston, tms. sisäinen tunniste Sivun otsikkotietueen sisältöä... Sivun tietuehakemiston alkioiden lukumäärä. Sivun sisäisen vapaan tilan hallitsemiseksi tarvittavaa tietoa: sivun tietuealueen pisimmän yhtenäisen vapaan alueen pituus ja sivun yhteenlaskettu vapaan tilan määrä. Sivun viimeisimmän päivityksen lokikirjauksen järjestysnumero (page log-sequence number, Page-LSN). Puskuroidun sivun Page- LSN-kenttää päivitetään aina sivun päivityksen yhteydessä; kenttään sijoitetaan päivitystä kuvaavan lokikirjauksen LSN. Sivun tietuealue sisältää sivun varsinaisen tiedon, tietosivun tapauksessa sivulle sijoitetut loogisen tietokannan monikot. Tietuealuetta täytetään sivun alusta lukien (otsikkotietueen jäljestä). Sivun tietuehakemisto on sivun lopussa sijaitseva taulukko m, jonka alkio m[i] sisältää tietuealueen i:nnen tietueen tavusiirtymän sivun alusta lukien. Tietuehakemisto kasvaa sivun lopusta alkuun päin

12 Monikkotunniste Jokaisella sivulla on yksikäsitteinen sivutunniste (page identifier, page-id, PID), joka yksilöi sivun fyysisessä tietokannassa: sivutunniste sisältää tiedoston numeron ja sivun järjestysnumeron tiedostossa. Hajautetussa tietokannassa täydellinen sivutunniste sisältää lisäksi järjestelmän asianomaisen pisteen (site, node) tunnisteen. Sivun tunnisteesta voidaan tiedostokuvaajan avulla määrätä sivun sisältävän levyjakson osoite. Sivun p tietuealueen i:nnen tietueen tietuetunniste (record identifier, record-id, RID) on pari (p,i), missä p on sivutunniste. Tietosivun p tietueeseen i sijoitetun monikon tietuetunnistetta (p, i) kutsutaan myös monikkotunnisteeksi (tuple identifier, tuple-id, TID). Monikkotunnisteeseen perustuva haku on nopein tapa hakea monikko esille: 1. Eristä monikkotunnisteesta (p, i) sivutunniste p ja naulitse sivu p puskuriin; olkoon p:n puskurikehyksen osoite b. 2. Hae monikko osoitteesta b + m[i]. Tietuehakemiston m kautta käyvän epäsuoran osoituksen ansiosta tietueen tunniste voidaan säilyttää samana, vaikka tietuetta siirreltäisiin sivun sisällä Tiedostot ja segmentit Tietokannan sivut ryhmitellään yleensä tiedostoihin (file) tai segmentteihin (segment). Ryhmittely perustuu usein tietueiden tyyppiin. Relaatiotietokannan yksittäinen relaatio sijoitetaan usein omaan tiedostoonsa. Joissakin järjestelmissä kahden tai useamman toisiinsa liittyvän relaation monikot voidaan kaikki sijoittaa samaan tiedostoon, ns. ryvästiedostoon (cluster file), niin että samalla liitosattribuutin arvolla varustetut monikot ovat fyysisesti lähekkäin. Hyvin suuri relaatio on pakko osittaa useampaan tiedostoon. Osittaminen usein myös helpottaa tietokannan hallintatoimenpiteitä sekä lisää käsittelyn tehokkuutta (rinnakkaisuus). Tiedosto tai segmentti koostuu yhdestä tai useammasta fyysisesti peräkkäisten sivujen levyalueesta (extent). Tiedostolle varataan tilaa tarvittaessa alue (tai muutama alue) kerrallaan. Useissa järjestelmissä loogisen tietokannan tietokokoelmat ryhmitellään ylimmällä tasolla tauluavaruuksiksi tai taulutiloiksi (tablespace) kutsutuiksi loogisiksi tallennusyksiköiksi. Jokainen tauluavaruus jakaantuu tiedostoihin eli segmentteihin Tietokantasivujen puskurointi Tietokantapalvelimen ollessa käynnissä on keskusmuistista varattuna tietokantasivujen käsittelyä varten yksi tai useampi puskuri. Puskuri (buffer) eli puskuriallas (buffer pool) on sivun kokoisista puskurikehyksistä (buffer frame) koostuva taulukko B[1, 2,..., N]. Mikäli tietokannassa esiintyy erikokoisia sivuja, on jokaista eri sivukokoa varten oltava eri puskuri. Puskurin koko N on yleensä kertaluokkaa pienempi kuin tietokannan sivujen lukumäärä, joten yleensä vain pieni osa tietokannan sivuista mahtuu kerrallaan puskuriin. Puskurin kokoa voidaan säädellä, mutta se voi harvoin olla enempää kuin joitakin tuhansia sivuja, kun taas tietokanta sisältää miljoonia, iso tietokanta jopa miljardeja sivuja. Jotta tietokannan sivun p sisältöä voitaisiin lukea tai kirjoittaa, on sivu tuotava levyltä johonkin vapaaseen puskurikehykseen B[i]. Sivun p käsittelyn ajaksi tietokantaa käsittelevä prosessi tai säie naulitsee (fix, pin) sivun puskuriin. Mikäli sivu p ei ole ennestään puskurissa, naulintakutsu fix(p) tuo p:n ensin levyltä puskuriin johonkin vapaaseen puskurikehykseen. Naulittua sivua ei puskurinhallitsimen ole lupa poistaa puskurista eikä siirtää toiseen kehykseen. Kutsuneelle prosessille välitetty sivun puskurikehyksen osoite säilyy siis voimassa naulinnan ajan. Sivun käsittelyn päätyttyä prosessi tai säie vapauttaa naulinnan (unfix, unpin)

13 Sivu voidaan poistaa puskurista vasta, kun se ei ole enää naulittuna millekään prosessille. Sivuja poistetaan puskurista yleensä vasta silloin, kun puskuri on täynnä ja levyltä tuotavalle sivulle p täytyy (fix(p)-kutsussa) osoittaa puskurikehys. Tällöin puskurista poistetaan LRU-periaatteen mukaisesti sivu q, joka on pisimpään ollut käyttämättä (so. lukematta tai päivittämättä); mikäli sivua q on päivitetty, se on ensin vietävä levylle. SQL-kyselyn toteutus sisältää sarjan sivujen fix- ja unfix-kutsupareja, jotka mahdollistavat operoinnin kyselyn viittaamiin sivuihin. Puskuroidun sivun puskurinohjauslohko (buffer control block) on puskurinhallitsimen ylläpitämä pieni keskusmuistirakenne, joka sisältää mm. sivun tunnisteen, sivun sijainnin puskurissa (kehyksen osoitteen), naulintalaskurin (monelleko prosessille tai säikeelle sivu naulittu), päivitysbitin (sivu päivitetty/päivittämätön), viimeisimpään päivitykseen liittyneen lokikirjauksen LSN:n sekä osoittimen kehykseen viittauksia valvovaan semaforiin. Ohjauslohkojen osoitteet talletetaan hajautustauluun, jota indeksoidaan sivun tunnisteella. Näin saadaan nopeasti selville, onko tietty sivu puskurissa vai ei ja mikä puskurikehys puskuroidulle sivulle on varattu Sivujen naulinnat SQL-operaation suorituksessa SQL-kyselyn select sum(salary) from employee suoritus transaktiossa T sisältää relaation employee tietosivujen läpikäynnin niiden fyysisessä tallennusjärjestyksessä; kunkin tietosivun p kohdalla suoritetaan mm. seuraavat toimenpiteet: 1. fix(p); 2. hae p:n puskurikehyksestä kaikkien employee-monikoiden salaryattribuutin arvot ja lisää ne summaan; Naulinnan yhteydessä sivu p täytyy vielä lukusalvata (read-latch) naulinnan ajaksi, jottei mikään muu prosessi pääse samanaikaisesti päivittämään sitä. Lisäksi relaatio employee tai kaikki sen monikot täytyy lukulukita (readlock, S-lock) transaktiolle T sen sitoutumiseen asti transaktion eristyvyyden takaamiseksi. Salpauskäytäntö esitetään jäljempänä, ja lukitukseen perustuva samanaikaisuuden hallinta myöhemmin tällä kurssilla. 3. unfix(p) SQL-päivityslauseen update employee set salary = salary where employee-id = I suoritus transaktiossa T sisältää mm: 1. fix(q)- ja unfix(q)-kutsuja relaation employee attribuuttiin employeeid perustuvan hakemiston sivuille työntekijän I-1234 tietosivun p paikallistamiseksi employee-relaatiossa; 2. fix(p); 3. paikallista työntekijän I-1234 employee-monikko sivulla p ja lisää sen salary-attribuutin arvoa 100:lla; Päivitettävän sivun naulinnan yhteydessä sivu täytyy vielä kirjoitussalvata (write-latch) naulinnan ajaksi, jottei mikään toinen prosessi pääse samanaikaisesti lukemaan tai päivittämään sitä. Lisäksi päivitettävä employee-monikko täytyy kirjoituslukita (write-lock, X-lock) transaktiolle T sen sitoutumiseen asti transaktion eristyvyyden takaamiseksi. 4. kirjaa päivitys lokiin transaktiolle T ja leimaa lokikirjauksen LSN sivun p Page-LSN-kenttään; 5. unfix(p)

14 Naulintakutsun suoritus fix(p)-kutsun suoritus (yksinkertaistettuna) sisältää seuraavat vaiheet: 1. Puskurinhallitsin etsii hajautustaulusta sivun p tunnistetta. Jos löytyy, mennään askeleeseen Etsitään puskurista kehys B[i], johon ei ole osoitettu sivua. Jos vapaata kehystä ei ole, poistetaan puskurista jokin naulitsematon sivu q. Jos q:ta on päivitetty (ts. q:n tuoretta sisältöä ei ole levyllä), viedään q ensin levylle q:n sivutunnisteen osoittamaan levyosoitteeseen. 3. Määrätään sivun p tunnisteesta levyjakson osoite. 4. Tuodaan sivu p levyltä, sijoitetaan se kehykseen B[i] ja tehdään p:lle puskurinohjauslohko, jossa päivitysbitti on nolla ja naulintalaskuri on nolla. 5. Lisätään p:n puskurinohjauslohkon naulintalaskuria yhdellä ja palautetaan kehyksen osoite kutsuneelle prosessille. Mikäli naulintakutsun askeleessa 2 kaikki kehykset ovat varattuja ja naulittuja, jää kutsua suorittava prosessi tai säie odottamaan vapaan kehyksen ilmaantumista, ts. sitä, että jokin toinen prosessi suorittaa kutsun unfix(q) jollekin puskuroidulle sivulle q. Naulinnan vapautuskutsu unfix(p) vähentää sivun p naulintalaskuria yhdellä Tietokannan tila Sivun p levyversio (disk version) on levyllä p:n levyosoitteessa olevan sivun sisältö. Fyysisen tietokannan levyversio on sen sivujen levyversioiden joukko. Loogisen tietokannan levyversio on vastaavan fyysisen tietokannan levyversion tietosivujen sisältämien monikoiden joukko. Puskuroidun sivun p puskuriversio (buffer version) on puskurissa oleva p:n sisältö. Sivun p nykyversio (current version) on p:n puskuriversion sisältö, jos p on puskuroituna, ja p:n levyversion sisältö muutoin. Fyysisen tietokannan tila (state) eli nykyversio tietyllä hetkellä on sen sivujen nykyversioiden sisältö kyseisellä hetkellä. Loogisen tietokannan tila eli nykyversio tietyllä hetkellä on sen relaatioiden sisältämien monikoiden joukko kyseisellä hetkellä, ts. vastaavan fyysisen tietokannan tietosivujen nykyversioiden sisältämien monikoiden joukko. Päivitetyn sivun puskuriversio eroaa sivun levyversiosta siihen asti, kun sivu viedään puskurista levylle. Levylleviennissä sivun levyversion päälle kirjoittuu sivun puskuriversio Tehokkuussyistä päivitettyä sivua ei viedä levylle välittömästi päivitysoperaation suorituksen jälkeen, eikä edes sivua päivittäneen transaktion sitouduttua. Usein käytettyä sivua pyritään pitämään puskurissa mahdollisimman pitkään (LRU-periaate). Sivun puskuriversioon voi näin ollen kertyä useita päivityksiä, ja sivun levyversio voi jäädä paljon jälkeen nykyversiosta. Esimerkiksi tuhat peräkkäistä transaktiota päivittää kukin vuorollaan jotakin tietosivulla p olevaa monikkoa ja sitoutuu. Sivua p ei viedä välillä kertaakaan levylle, joten sen levyversio on ainakin tuhat päivitystä jäljessä nykyversiosta. Tietokannan elvytys ja tarkistuspisteet Miten käy, jos järjestelmä romahtaa kesken transaktioiden käsittelyn, kun puskurissa on päivitettyjä sivuja? Keskusmuistin sisältö, mukaan lukien puskurit, menetetään. Sitoutuneiden transaktioiden tekemien päivitysten lokikirjaukset on kuitenkin sitoutumisen yhteydessä viety lokilevylle. Tietokannan elvytyksessä (restart recovery) tietokannan romahdusta edeltävä tila rekonstruoidaan lokikirjausten avulla tietokannan levyversiosta: lokikirjausten esittämät päivitykset suoritetaan levyltä puskuriin tuoduille sivuille. Lisäksi peruutetaan romahduksen vuoksi keskeytyneet transaktiot (ja saatetaan valmiiksi jo peruuntuvien transaktioiden peruutus)

15 Elvytyksen nopeuttamiseksi päivitettyjä sivuja viedään levylle aika ajoin (tyypillisesti 5 10 minuutin välein) otettavan tarkistuspisteen (checkpoint) yhteydessä. Juuri levylle viennin jälkeen sivun levyversio on samansisältöinen kuin sivun nykyversio (eli puskuriversio). Täydellisessä tarkistuspisteessä viedään levylle kaikki päivitetyt sivut puskurista. Täydellisen tarkistuspisteen ottamisen jälkeen tietokannan sivujen levyversiot ovat samansisältöisiä kuin tietokannan tilassa (mikäli tarkistuspisteen ottamisen aikana tietokannan päivitys on estetty). Täydellisen tarkistuspisteen ottaminen yleensä hidastaa transaktionkäsittelyä huomattavasti. Täydellistä tarkistuspistettä kevyempi menettely tehostaa elvytystä on epäsuora tarkistuspiste (indirect checkpoint) eli sumea tarkistuspiste (fuzzy checkpoint), jossa vain osa päivitetyistä sivuista viedään levylle. Minimaalisimmillaan sumeassa tarkistuspisteessä ei viedä yhtään sivua levylle, vaan kirjataan lokiin jokaisen puskurissa olevan päivitetyn sivun sivutunniste sekä sen lokikirjauksen LSN, josta lähtien sivun päivityksiä saattaa puuttua sivun levyversiosta. Tätä tietoa käytetään elvytyksessä sen selvittämiseen, minkä sivujen levyversioista mahdollisesti puuttuu päivityksiä. Asiaa tarkastellaan tarkemmin elvytystä käsittelevässä kurssin osassa Tiedoston vapaan tilan hallinta Edellä esitetty sivun sisäinen tietorakenne sisältää sivun sisäisen vapaan tilan hallinnan. Seuraavassa tarkastellaan, miten hallitaan koko tiedoston vapaata tilaa. Mille sivulle sijoitetaan relaatioon r lisättävä uusi monikko t? Joissakin tietokantarakenteissa, kuten ns. harvassa B-puussa, jonka lehtisivut sisältävät perustietueita, lisättävän monikon t sijoitussivu p määräytyy suoraan indeksointiattribuutin arvon mukaan. Mikäli t ei sovi indeksointiattribuutin arvon peittävälle sivulle p, sivu halkaistaan, so. sivun p monikot jaetaan p:n ja sille varattavan uuden tyhjän sisarussivun p kesken. B-puun lehtisivun tultua monikoiden poistojen seurauksena liian vajaaksi sivun monikot siirretään sisarussivulle ja tyhjentynyt sivu vapautetaan. Ns. tiheitä hakemistorakenteita käytettäessä perustietueet pidetään järjestämättömässä tiedostossa eli kasassa, ja hakemiston lehtisivuilla on tietueita, jotka sisältävät perustietueen indeksointiattribuutin arvon ja perustietueen tunnisteen. Edellisessä tapauksessa on monikon t lisäämistä varten löydettävä täysin tyhjä sivu p, joka linkitetään B-puun osaksi. Jälkimmäisessä tapauksessa on löydettävä sellainen kasan sivu p, jossa on tilaa monikolle t B-puun sivujen varausta ja vapauttamista varten voidaan pitää yllä tyhjien sivujen ketjua, johon B-puusta irrotetut, tyhjentyneet hakemisto- tai tietosivut sijoitetaan. Varattava uusi sivu otetaan tyhjien sivujen ketjusta, mikäli ketju on epätyhjä; muutoin B-puulle varattua tiedostoaluetta kasvatetaan varaamalla uusi yhtenäinen alue levyltä ja ottamalla sieltä käyttöön peräkkäisjärjestyksessä ensimmäinen sivu. Toinen tapa on ylläpitää varauskuvaajassa (space map) tietoa siitä, mikä tiedoston sivuista on vapaa ja mikä varattu. Tiedoston ensimmäisen sivun (sivun 0) täyttää e-alkioinen bittitaulukko, joka sisältää tiedoston e:n seuraavan sivun, so. sivujen 1,2,...,e muodostaman alueen varauskuvaajan. Varauskuvaajan i:nnen alkion arvo 1 osoittaa, että sivu i on varattu, ja arvo 0, että sivu i on vapaa. Neljän kilotavun sivulle mahtuu noin alkioinen varauskuvaaja. Yli sivuisen tiedoston vapaan tilan hallitsemiseksi tarvitaan useampia varauskuvaajia: sivun e + 1 täyttää varauskuvaaja, joka osoittaa seuraavien e:n sivun vapaan tilan, jne. Tiedostolle voidaan varata sivuja rypäissä, joissa on e sivua (tai sitä vähemmän)

16 Fyysisen tietokannan eheys Fyysinen tietokanta (tai oikeammin sen tila) on eheä, jos sen kaikkien sivujen sisäinen tietorakenne on eheä ja sivujen joukko muodostaa asianomaisen tiedostorakenteen mukaisen verkkorakenteen. Esim. tiedoston B-puurakenne määrittää tarkoin, millaisen verkkorakenteen sivut muodostavat, millaista tietoa rakenteen milläkin sivulla pitää olla, millaisten tasapainoehtojen tulee olla täytetty ja millaisella algoritmilla B-puun lehtisivuille tallennetut tietueet löydetään. Eheysvaatimukset koskevat ainoastaan tietokannan nykyversiota (kun rakennemuutoksia ei ole käynnissä). Tietokannan levyversion ei tarvitse olla eheä. Mikäli jokainen yksittäisen sivun levylle vienti tai levyltä tuonti sujuu aina virheettömästi, fyysisen tietokannan jokaisen sivun levyversio on kyllä sisäiseltä tietorakenteeltaan eheä. Sivujen levyversioiden joukko ei kuitenkaan välttämättä muodosta eheätä tietokantarakennetta. Esim. kun B-puun rakenne muuttuu täyttynyttä sivua p halkaistaessa, osa rakennemuutokseen osallistuneista sivuista (esim. p) on voitu viedä levylle, mutta osa sivuista (esim. p:n isä ja uusi sisarus) on viemättä levylle. Samoin loogisen tietokannan levyversio voi olla jatkuvasti epäeheä. Kun minkään aktiivisen transaktion tietokantaoperaatiota ei ole parhaillaan suoritettavana, on fyysisen tietokannan nykyversio eheä. Kun yhtään transaktiota ei ole aktiivisena, on myös loogisen tietokannan nykyversio eheä, edellyttäen, että kaikki transaktiot ovat oikeellisia ja ne on ajettu täysin eristyneesti Salpauskäytäntö Tietokannan tulee säilyä eheänä samanaikaisten prosessien siihen kohdistamissa operaatioissa. Fyysisen tietokannan eheyden säilyttämiseksi tietokantasivua käsittelevän prosessin tai säikeen on aina asianmukaisesti salvattava (latch) naulitsemansa sivu sen käsittelyn ajaksi. Lukusalpa (read latch) oikeuttaa prosessin lukemaan sivua ja estää kaikkia prosesseja samanaikaisesti päivittämästä sivua. Usealla prosessilla voi olla sivuun yhtä aikaa lukusalpa. Kirjoitussalpa (write latch) oikeuttaa prosessin sekä lukemaan että päivittämään sivua ja estää muita prosesseja samanaikaisesti lukemasta ja päivittämästä sivua. Salvan haltijan on vapautettava (unlatch) salpa sivun käytön jälkeen. Salpa toteutetaan puskuroituun sivuun liittyvän semaforin avulla. Järjestelmä tuottaa automaattisesti jokaisen SQL-kyselyn aiheuttaman sivun p viittauksen edelle kutsun rl(p) fix(p) & read-latch(p), mikäli p:tä ainoastaan luetaan tällä naulintakerralla, ja kutsun wl(p) fix(p) & write-latch(p), mikäli p:tä päivitetään tällä naulintakerralla. Salpaus ja naulinta vapautetaan tuottamalla kutsu ul(p) unlatch(p) & unfix(p) Kun prosessi pyytää lukusalpaa sivuun, joka parhaillaan on kirjoitussalvattuna toiselle prosessille, tai kirjoitussalpaa sivuun, joka on parhaillaan luku- tai kirjoitussalvattuna toiselle prosessille, salpaa pyytänyt prosessi pannaan odottamaan, kunnes toiset prosessit ovat vapauttaneet salpansa. Periaatteena on, ettei mikään prosessi saa pitää salpaa kovin pitkää aikaa, ja ettei prosessilla saa olla kuin pieni vakiomäärä salpoja samanaikaisesti. Salpojen odotuksista ei näet ylläpidetä mitään odotusverkkoa mahdollisten lukkiumien havaitsemiseksi, joten prosessien salpauskäytännön tulee olla lukkiumat estävä. Useimmiten prosessilla on kerrallaan hallussaan vain yksi salpa suojaamassa tietokantaoperaatiota. Kun prosessi haluaa lukea tietosivulla p sijaitsevan monikon, prosessi suorittaa kutsun rl(p), kopioi monikon sivun p puskurikehyksestä ja suorittaa sitten kutsun ul(p). Kun prosessi haluaa päivittää tietosivulla p sijaitsevaa monikkoa, prosessi suorittaa kutsun wl(p), päivittää monikkoa sivun p puskurikehyksessä, tuottaa päivityksestä lokikirjauksen, leimaa sen LSN:n sivun p Page-LSNkenttään ja suorittaa sitten kutsun ul(p)

17 Konttauskäytäntö Ketjutettujen tietokantarakenteiden läpikäynnissä prosessin on tarpeen pitää kaksi sivua yhtä aikaa salvattuina. Oletetaan, että sivut p 1,..., p n muodostavat yksisuuntaisen ketjun niin, että sivun p i otsikkotietueessa on aina sivun p i+1 tunniste, 1 i < n, ja sivun p n otsikkotietueessa on ketjun päättävä tyhjä linkki. Prosessilla on hallussaan sivun p 1 tunniste ja se haluaa lukea sivut ketjun mukaisessa järjestyksessä. Jotta prosessi voisi varmistua siitä, että sivulta p i sivulle p i+1 johtava linkki todella pysyy voimassa linkin käytön ajan, on salpauskäytännön oltava seuraava: rl(p 1 ); lue sivua p 1 ja ota p 1 :stä seuraavan sivun tunniste p 2 ; rl(p 2 ); ul(p 1 ); lue sivua p 2 ja ota p 2 :stä seuraavan sivun tunniste p 3 ; rl(p 3 ); ul(p 2 ); lue sivua p 3 ja ota p 3 :sta seuraavan sivun tunniste p 4 ;... rl(p n ); ul(p n 1 ); lue sivua p n ja ota p n :stä seuraavan sivun tunniste (tyhjä); ul(p n ) Fyysisen tietokannan rakennemuutokset Lisättäessä tietoa tietokantaan joudutaan toisinaan varaamaan uusia sivuja ja kytkemään ne osaksi tietokantarakennetta. Tätä salpauskäytäntöä kutsutaan konttauskäytännöksi (latch-coupling). Konttauskäytäntöä sovelletaan mm. haettaessa tietuetta B-puusta. Tietueen hakupolulla B-puun juurisivulta tietueen sisältävälle lehtisivulle pidetään aina isäsivua salvattuna niin kauan kuin on saatu lapsisivu salvatuksi. B-puun täyttyneen sivun halkaisu sisältää uuden sivun varauksen ja sivun linkittämisen osaksi B-puun rakennetta. Tiedon poisto voi vastaavasti supistaa tietokantarakennetta, ja tyhjentyneitä sivuja irrotetaan rakenteesta. Kutsumme näitä fyysisen tietokannan rakennetta muuttavia operaatioita rakennemuutoksiksi (structure modification). Koko rakenteen täytyy säilyä eheänä, vaikka samanaikaisesti on suorituksessa useita transaktioita ja niiden aiheuttamia rakennemuutoksia. Rakennemuutokselta täytyy vaatia atomisuus Normaalin transaktionkäsittelyn aikana fyysisen tietokannan eheys taataan pitämällä fyysisen tietokantarakenteen rakennemuutokseen osallistuvat sivut kirjoitussalvattuina rakennemuutoksen ajan. Esim. kun B-puun sivun p täyttynyt lapsisivu q halkaistaan varaamalla uusi tyhjä sivu q, niin kaikki nämä kolme sivua pidetään kirjoitussalvattuina halkaisun ajan, so. kunnes sivu q on saatu linkitetyksi sivun p lapseksi ja sivulta q on saatu siirretyksi puolet tietueista sivulle q. Häiriötilanteessa fyysisen tietokannan levyversio voi olla enemmän tai vähemmän epäajantasainen sekä tietosivujen päivitysten että rakennemuutosten osalta. Tietokannan levyversiossa ei välttämättä näy rakennemuutosta, joka on ehditty suorittaa valmiiksi ennen häiriötä, tai rakennemuutos näkyy vain osittain, so. osasta rakennemuutokseen osallistuvia sivuja levylle on ehtinyt sivun uusi versio ja osasta jäljellä on vanha versio. Uuden sivun varaus tietokantarakenteeseen Oletetaan, että looginen tietokanta (tai sen relaatio) toteutetaan kasana (heap), so. järjestämättömänä peräkkäistiedostona, jolle varataan uusia sivuja sitä mukaa kuin tietokantaan lisätään uusia monikoita. Kasaan kuuluvat sivut linkitetään niin, että sivun otsikkotietueessa on kasan seuraavan sivun tunniste. Kasan ensimmäisen sivun f otsikkotietueessa on myös kasan viimeisen sivun tunniste. Oletetaan, että transaktion T 1 operaatio I[x,v] saa aikaan uuden sivun q varauksen ja linkittämisen kasan loppuun, sen viimeisen sivun p seuraajaksi

18 Oletetaan, että seuraavaksi toinen transaktio T 2 suorittaa operaation I[y,w], missä y > x. Jotta rakenne säilyisi eheänä normaalin transaktionkäsittelyn kuluessa, täytyy varauskuvaajan sisältävä sivu s, kasan viimeinen sivu p, kasaan linkitettävä sivu q ja kasan ensimmäinen sivu f pitää kirjoitussalvattuina koko varausoperaation ajan. Kaikkia näitä sivuja näet päivitetään varausoperaatiossa; varattu sivu q, jolle monikko (x,v) on tarkoitus lisätä, alustetaan tyhjäksi tietosivuksi. Sivu q pidetään kirjoitussalvattuna, kunnes operaatio I[x, v] on loppuun suoritettu, ts. monikko (x,v) on lisätty sivulle q ja lisäys kirjattu lokiin. Kasarakenteessa tämäkin lisäysoperaatio suoritetaan sivulle q. Kun edellisen lisäyksen tehnyt transaktio T 1 on vapauttanut kirjoitussalpansa, pääsee T 2 kirjoitussalpaamaan sivun q ja lisäämään monikon (y,w) sinne. Sitten T 2 sitoutuu. T 1 on vielä aktiivinen ja haluaa nyt keskeytyä. T 1 :n peruuntumisvaiheessa suoritetaan käänteisoperaatio I 1 [x,v], joka poistaa monikon (x,v) sivulta q. Sitä vastoin ei sovi peruuttaa sivun q varausta. T 2 on näet ehtinyt jo tehdä oman päivityksensä sivulle q ja sitoutuakin. Siis rakennemuutoksen on annettava sitoutua siitä riippumatta, miten käy sen transaktion, joka rakennemuutoksen aiheutti

19 Lokin ylläpito ja puskurinhallinta C. Mohan, D. Haderle, B. Lindsay, H. Pirahesh & P. Schwartz: ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using write-ahead logging. ACM Transactions on Database Systems 17:1 (1992), ; kohdat 1.1 (logging, failures, and recovery methods), 1.2 (latches and locks), 1.4 (buffer management), 2 (goals), 3 (overview of ARIES), 4 (data structures), 5.1 (updates) ja 9 (nested top actions). A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Fifth Edition. McGraw-Hill, 2006, sivut , luvun 11 (storage and file structure) kohdat (buffer manager) ja (buffer-replacement policies); sivut , luvun 17 (recovery system) kohdat 17.2 (storage structure), 17.3 (recovery and atomicity) ja 17.4 (log-based recovery); sivut , kohta 17.6 (buffer management); sivut , kohta (logical undo logging); sivut , kohdan (ARIES) 1 alakohta (data structures). Tietokannan loki, fyysinen ja looginen lokikäytäntö, fysiologinen lokikäytäntö, aktiivisten transaktioiden taulu, avainvälimallin operaatioiden lokikirjaukset, rakennemuutosten lokikirjaukset, tietosivun päivittäminen, WAL-käytäntö, sitoutumiskäytäntö, puskurinhallintakäytännöt, levyhakujen vähentäminen. 2 Tietokannan loki Normaalin transaktionkäsittelyn aikana pidetään yllä lokia (log) seuraavia tarkoituksia varten: Transaktioiden peruutus tai osittaisperuutus: etenemisvaiheen päivitysten käänteisoperaatioiden tuottaminen. Häiriöistä elvytys: tietokannan levyversiosta puuttuvien päivitysten toisto ja transaktioiden peruutus. Lokiin kirjataan transaktioiden tietokantaan tekemät päivitykset, so. avainvälimallissa I-, D-, I 1 - ja D 1 -operaatiot, transaktioiden ohjausoperaatiot B, C, A, S[P], A[P] ja C[P], fyysisen tietokannan rakennemuutokset sekä elvytystä nopeuttavaa tietoa tarkistuspisteistä. Jokainen lokikirjaus saa yksikäsitteisen lokijärjestysnumeron (log sequence number, LSN). Keskitetyssä tietokannassa lokijärjestysnumeroiden jono on nouseva: jos transaktion T operaatio o on suoritettu transaktion T operaation o jälkeen, on LSN(o) < LSN(o ). Yhteislevy- tai sivupalvelinjärjestelmässä, jossa pisteet (asiakkaat) tuottavat yhteiseen tietokantaan kohdistamistaan operaatioista lokikirjauksia toisistaan riippumattomasti, ei lokijärjestysnumeroiden jono voi olla globaalisti nouseva. Samalle sivulle kohdistuvien päivitysten LSN-arvojen pitää kuitenkin aina muodostaa ajan suhteen nouseva jono. 3 4 Lokijärjestysnumerot pyritään tuottamaan siten, että ne toimivat myös suorina (tai lähes suorina) osoitteina lokikirjauksiin. Usein käytetään lokitiedoston numeron ja tavusiirtymän muodostamaa paria. Tavusiirtymä ilmoittaa lokikirjauksen ensimmäisen tavun numeron tiedoston alusta lukien; siitä saadaan tietueen sijaintisivu operaatiolla sivunumero = tavusiirtymä div sivun koko. Tavusiirtymän sijasta voitaisiin käyttää myös tietuetunnistetta (p,i), missä p on sivunumero (1,2,3,...) ja i tietueen järjestysnumero sivulla (sivun sisäisen tietuehakemiston indeksi). Silloin (p 1,i 1 ) < (p 2,i 2 ), jos joko p 1 < p 2 tai p 1 = p 2 ja i 1 < i 2. Transaktion T tuottama lokikirjaus varustetaan aina T :n tunnisteella ja T :lle kuuluvat lokikirjaukset linkitetään LSN:ien avulla toisiinsa. Transaktion T lokikirjauksen yleinen muoto on n: T,o[ x],n, missä o[ x] esittää kirjattavaa operaatiota ja sen argumentteja, n on kirjauksen LSN ja n on joko T :n edellisen lokikirjauksen LSN (etenemisoperaation kirjauksessa) tai T :n seuraavaksi peruutettavan operaation lokikirjauksen LSN (käänteisoperaation kirjauksessa). Transaktion T etenemisoperaatio o[ x] kirjataan lokitietueeseen siten, että operaatio voidaan tarvittaessa toistaa tai perua. Transaktion T peruutusvaiheessaan tai osittaisperuutuksessa suorittama käänteisoperaatio o 1 [ x] on tarpeen kirjata ainoastaan toistokelpoisesti: operaatio o 1 [ x] on lokikirjauksen perusteella voitava toistaa; peruutuskelpoisuus ei sitä vastoin ole tarpeen, koska käänteisoperaatioita ei koskaan peruta. Lokikirjauskäytännöt voidaan luokitella fyysisiin, loogisiin ja fysiologisiin lokikäytäntöihin. 5 6

20 Fyysinen ja looginen lokikäytäntö Arvoperustaisessa eli fyysisessä lokikäytännössä (value logging, physical logging) lokitietueeseen kirjataan päivityksen kohteena olevan sivun numero, päivitysoperaation vaikutuksesta muuttuneiden tavujen sijainti sivulla sekä päivityksen alkukuva ja jälkikuva. Alkukuva (before image) ilmoittaa tavujen sisällön ennen päivitystä ja jälkikuva (after image) tavujen sisällön päivityksen jälkeen. Esim. monikon (x,v) lisäyksestä sivulle p tietuepaikkaan i kirjattaisiin tietuepaikan i muuttuneet tavut sivun p tietuealueella sekä myös muuttuneet tavut sivun p tietuehakemistossa (indeksin i kohdalla) ja p:n otsikkotietueessa (tietuehakemiston alkioiden lukumäärän osoittavassa kentässä). Muuttuneet tavujonot osoitteineen (tavusiirtymä sivun alusta) ja alku- ja jälkikuvineen voidaan kirjata kaikki yhteen lokikirjaukseen, mikäli tämä mahtuu yhdelle sivulle. Voidaan myös käyttää useampaa lokitietuetta; esim. alkukuva voidaan kirjata yhteen ja jälkikuva toiseen. Lokiin fyysisesti kirjattu päivitysoperaatio voidaan toistaa naulitsemalla ja kirjoitussalpaamalla asianomainen sivu ja kirjoittamalla siihen jälkikuva, ja operaatio voidaan perua kirjoittamalla alkukuva. 7 8 Loogisessa lokikäytännössä (logical logging) lokitietueeseen kirjataan loogisia operaatioita, so. avainvälimallissamme operaatioita I[x,v], D[x,v], I 1 [x,v] ja D 1 [x,v]. Esim. transaktion T etenemisoperaatio I[x,v] kirjattaisiin n: T,I,x,v,n, missä n on T :n edellisen lokikirjauksen LSN. Looginen operaatio toistetaan suorittamalla operaatio uudestaan (loogisesti) ja perutaan suorittamalla operaation käänteisoperaatio (loogisesti). Esim. I[x,v] perutaan suorittamalla D[x,v]. Loogisesti kirjatun operaation toisto ja peruutus ovat tehottomia. Esim. toistetaan D[x,v]. Jos tietokannan rakenteena on kasa (järjestämätön peräkkäistiedosto), on siitä etsittävä avainarvolla x varustettu monikko konttaamalla kasan sivut läpi kirjoitussalpoja varaten, kunnes päästään monikon (x, v) sisältävälle sivulle. Jos tietokannan rakenteena on B-puu, on siitä etsittävä avainarvolla x varustettu monikko konttaamalla hakupolku B-puun juurisivulta avainarvon x peittävälle lehtisivulle Fysiologinen lokikäytäntö Nykyisissä tkhj:ssä sovelletaan yleensä fyysis-loogista eli fysiologista lokikäytäntöä (physiological logging), jossa lokikirjaukset ovat sivun osalta fyysisiä ja tietueen osalta loogisia. Esim. transaktion T harvan B-puun lehtisivulle p suorittama operaatio I[x,v] kirjataan n: T,I, p,x,v,n. Esitettävässä elvytysmenetelmässä (ARIES-algoritmissa) operaatioiden toistot suoritetaan aina täsmälleen lokikirjausjärjestyksessä eli operaatioiden alkuperäisessä suoritusjärjestyksessä. Fysiologisesti kirjatun operaation toisto voidaan niin muodoin aina toteuttaa fyysisesti, so. samalle sivulle p, johon se alkujaan tehtiin ja jonka sivun tunniste, p, on kirjattu lokitietueeseen. Fyysinen toisto on hyvin tehokasta, sillä operaation kohdetta ei tarvitse etsiä, vaan kohteen sijaintisivulle päästään suoraan riippumatta siitä, mikä fyysinen tietokantarakenne on kysymyksessä. Lokiin tietueella T,I, p,x,v,n kirjatun operaation I[x,v] toistossa sivu p naulitaan ja kirjoitussalvataan, lisätään monikko (x, v) sivulle p ja vapautetaan p:n salpaus ja naulinta. Lokiin tietueella T,D, p,x,v,n kirjatun operaation D[x,v] toistossa sivu p naulitaan ja kirjoitussalvataan, poistetaan sivulta p avainarvolla x varustettu monikko (joka on (x,v)) ja vapautetaan p:n salpaus ja naulinta

Transaktiopalvelimen rakenne, s. 43. Levyjaksot, sivut ja tiedostot, s. 46. Tietokantasivujen puskurointi, s. 53. Tietokannan tila, s. 57.

Transaktiopalvelimen rakenne, s. 43. Levyjaksot, sivut ja tiedostot, s. 46. Tietokantasivujen puskurointi, s. 53. Tietokannan tila, s. 57. Fyysinen tietokanta A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Fifth Edition. McGraw-Hill, 2006, sivut 24 26, luvun 1 (introduction) kohta 1.11 (database architecture); sivut

Lisätiedot

Tietokantarakenteet ja -algoritmit 3. harjoitus

Tietokantarakenteet ja -algoritmit 3. harjoitus Tietokantarakenteet ja -algoritmit 3. harjoitus Malliratkaisut 1. Analyysivaiheen alussa alustetaan aktiivisten transaktioiden taulu (tyhjä) ja päivitettyjen sivujen taulu (samoin tyhjä) tarkistuspisteestä.

Lisätiedot

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely HAAGA-HELIA Heti-09 1 (14) Transaktionkäsittely Transaktion / Tapahtuman hallinta... 2 Taustaa... 3 Tapahtuman käsite... 5 ACID-ominaisuudet... 7 Samanaikaisuuden hallinta... 8 Lukitukset... 9 Toipuminen...

Lisätiedot

Tietokantarakenteet ja -algoritmit 6. harjoitus

Tietokantarakenteet ja -algoritmit 6. harjoitus Tietokantarakenteet ja -algoritmit 6. harjoitus Malliratkaisut 1.. a) T1 = B I[b, r 2, 0, 0] IX-lukitaan järjestelmä s, tietokanta b ja relaatio (b, r 2 ) (tässä järjestyksessä), X-lukitaan (b, r 2, 0)

Lisätiedot

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA 1 (14) Outi Virkki Tiedonhallinta HELIA 1 (14) Luento Transaktion / Tapahtuman hallinta... 2 Taustaa... 3 Tapahtuman käsite... 5 ACID-ominaisuudet... 7 Samanaikaisuuden hallinta... 8 Lukitukset... 9 Toipuminen... 10 Loki-tiedosto... 11

Lisätiedot

D B. Tiedostojen käsittely

D B. Tiedostojen käsittely Tietokantojen tietoja säilytetään yleensä apumuistissa, lähinnä levymuisteissa Apumuistiin tallentamisen merkittäviä etuja keskusmuistiin nähden ovat tiedon säilyvyys (virtakatkon yli) säilytyskapasiteetin

Lisätiedot

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

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa Tietojen tallennusrakenteet Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa tiedot tiedostoon kuuluvista lohkoista esim. taulukkona, joka voi muodostua ketjutetuista

Lisätiedot

Luento 2: Tiedostot ja tiedon varastointi

Luento 2: Tiedostot ja tiedon varastointi 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...

Lisätiedot

Tietokantarakenteet ja -algoritmit Harjoitukset 1-12

Tietokantarakenteet ja -algoritmit Harjoitukset 1-12 Tietokantarakenteet ja -algoritmit Harjoitukset 1-12 Malliratkaisut 1 Harjoitus 1 1. Kukin DEPARTMENT-monikko d sijoitetaan omalle sivulleen. Sen seuraksi samalle sivulle sijoitetaan tähän liittyviä EMPLOYEE-monikoita

Lisätiedot

HELIA 1 (17) Outi Virkki Tiedonhallinta

HELIA 1 (17) Outi Virkki Tiedonhallinta HELIA 1 (17) Luento 4.1 Looginen suunnittelu... 2 Relaatiomalli... 3 Peruskäsitteet... 4 Relaatio... 6 Relaatiokaava (Relation schema)... 6 Attribuutti ja arvojoukko... 7 Monikko... 8 Avaimet... 10 Avain

Lisätiedot

Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne

Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne HAAGA-HELIA Heti-09 1 (6) Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne Tietovarastotekniikan kehittyminen... 2 Tiedostopohjaiset ratkaisut... 2 Tiedoston palvelut... 3 Tiedostopohjaisten

Lisätiedot

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu HELIA 1 (16) Luento 3.2 Suorituskyvyn optimointi jatkuu...... 2 Tietojen tallennusratkaisut... 2 Tiedon tallennuksen yksiköitä... 3 Loogiset... 3 Fyysiset... 3 Tallennusmäärittelyt Oraclessa... 5 Loogiset

Lisätiedot

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

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

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

Lisätään avainarvo 1, joka mahtuu lehtitasolle: Helsingin Yliopisto, Tietojenkäsittelytieteen laitos Tietokannan hallinta, kurssikoe 14.5.2004, J. Lindström Ratkaisuehdotuksia 1. Hakemistorakenteet, 15p. Tutkitaan tyhjää B+-puuta, jossa jokaiselle hakemistosivulle

Lisätiedot

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä hyväksymispäivä arvosana arvostelija Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä Tuomas Husu Helsinki 20.2.2010 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö i 1 Johdanto

Lisätiedot

Sivupalvelin- ja yhteislevyjärjestelmät

Sivupalvelin- ja yhteislevyjärjestelmät Sivupalvelin- ja yhteislevyjärjestelmät C. Mohan & I. Narang 1994: ARIES/CSA: a method for database recovery in client-server architectures. Proc. of the 1994 ACM SIG- MOD Internat. Conf. on Management

Lisätiedot

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa Samanaikaisuuden hallinta Optiot transaktionaalisissa työnkuluissa Sisältö Transaktionaaliset työnkulut Samanaikaisuuden ongelmat Optiot idea käyttökohteet WorkMan Optioiden toteutus Arviointi Transaktionaaliset

Lisätiedot

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet 3. Tietokannan hakemistorakenteet Tiedoston tietueiden haku voi perustua johonkin monesta saantipolusta (access path): - perustiedoston tiedostorakenne - hakemistot, joita voidaan tehdä käsittelytarpeiden

Lisätiedot

Tietohakemisto ja Transaktionkäsittely

Tietohakemisto ja Transaktionkäsittely HELIA TIKO-05 1 (18) Tietohakemisto ja Transaktionkäsittely Tietohakemisto...2 Oraclen tietohakemistonäkymät (osa)...3 Yleiset...3 Taulut...3 Säännöt...3 Näkymät...3 Synonyymit...4 Indeksit...4 Sekvenssit...4

Lisätiedot

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty

Lisätiedot

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

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto 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

Lisätiedot

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

D B. Levytiedostojen käsittely. Levytiedostojen käsittely Tietokantojen tietoja säilytetään yleensä apumuistissa, lähinnä levymuisteissa Apumuistiin tallentamisen merkittäviä etuja keskusmuistiin nähden ovat tiedon säilyvyys (virtakatkon yli) säilytyskapasiteetin

Lisätiedot

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

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää Levyn rakenne Levykössä (disk drive) on useita samankeskisiä levyjä (disk) Levyissä on magneettinen pinta (disk surface) kummallakin puolella levyä Levyllä on osoitettavissa olevia uria (track), muutamasta

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

D B. Transaktionhallinta

D B. Transaktionhallinta (transaction management) on keskeinen tekijä tietokannan samanaikaisen käytön ja virheistä toipumisen kannalta. Useat prosessit voivat käsitellä tietokantaa samanaikaisesti Jos tietokoneessa on vain yksi

Lisätiedot

D B. Harvat hakemistot. Harvat hakemistot

D B. Harvat hakemistot. Harvat hakemistot Harvassa hakemistossa on ei ole hakemistomerkintöjä jokaista tietuetta kohden vaan yksi merkintä jotain isompaa kokonaisuutta esimerkiksi sivua tai sivujoukkoa (esim. saman uran sivut) kohti Harvan hakemiston

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

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

Levymuisti. R&G Chapter 8 & Tietokannan hallinta, kevät 2006, Jan 1 Levymuisti R&G Chapter 8 & 9 16.02.06 Tietokannan hallinta, kevät 2006, Jan 1 Tiedon talletuspaikkoja Levy: Pystytään noutamaan satunnainen sivu kiinteällä kustannuksella Useiden sivujen noutaminen halvempaa

Lisätiedot

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta Tietokannan hallinta - kurssin tavoite Kurssilla opitaan periaatteet fyysisen tietokannan tallennuksesta ja käsittelystä tietokantakyselyiden muuntamisesta fyysisen tietokannan käsittelyoperaatioiksi kyselyn

Lisätiedot

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX SQL - perusteet SQL - yleistä Esa Salmikangas InMics SE Oy versio 16.6.2003 SQL - perusteet 1 SQL - perusteet 2 SQL Structured Query Language SQL on tietokantojen käsittelyyn kehitetty kieli yleisimmät

Lisätiedot

D B. Tietokannan hallinta kertaus

D B. Tietokannan hallinta kertaus TKHJ:n pääkomponentit metadata TKHJ:ssä Tiedostojen käsittely puskurien rooli tiedostokäsittelyssä levymuistin rakenne ja käsittely mistä tekijöistä hakuaika muodostuu jonotus jos useita samanaikaisia

Lisätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

Lisätiedot

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

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu. Helsingin yliopisto, Tietojenkäsittelytieteen laitos Kyselykielet, s 2006, Harjoitus 5 (7.12.2006) Tietokannassa on tietoa tavaroista ja niiden toimittajista: Supplier(sid,sname,city,address,phone,etc);

Lisätiedot

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat CSE-A1200 Tietokannat 29.3.2016 CSE-A1200 Tietokannat 29.3.2016 1 / 40 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten tietokannan relaatioiden (taulujen) määrittelyt kirjoitetaan SQL:llä. Osaat

Lisätiedot

Tiedonhallintajärjestelmän rakenne ja Suorituskyky

Tiedonhallintajärjestelmän rakenne ja Suorituskyky HELIA TIKO-05 1 (20) Tiedonhallintajärjestelmän rakenne ja Suorituskyky Tiedonhallintajärjestelmän rakenne... 2 SQL-käsittelijä... 3 Parsinta (Parser)... 3 Optimointi (Optimizer)... 3 Tilan käsittelijä...

Lisätiedot

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

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi); Tietokannat SQL-peruskomentojen pikaopas CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi); INSERT INTO table VALUES(val1,val2,... ); Lisää tauluun

Lisätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto Muita tietokantaobjekteja Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto Näkymät Näkymä (view) on looginen näyte tietokannan tauluista tai näkymistä Näkymä ei voi sisältää SELECT INTO,

Lisätiedot

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

TIEDONHALLINNAN PERUSTEET - SYKSY 2013 TIEDONHALLINNAN PERUSTEET - SYKSY 2013 Kurssikoodi: Saapumisryhmä: Luento 5 XX00AA79-3013 TU12S2 Pasi Ranne 11.9.2013 11/9/13 Helsinki Metropolia University of Applied Sciences 1 Tietokannan normalisoinnin

Lisätiedot

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Hajautettujen transaktioiden hallinta

Hajautettujen transaktioiden hallinta Hajautettujen transaktioiden hallinta M. Kifer, A. Bernstein & P. M. Lewis: Database Systems. An Application-Oriented Approach. Complete Version. Pearson Addison Wesley, 2006; sivut 1005 1028, luvun 24

Lisätiedot

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat CSE-A1200 Tietokannat 12.4.2016 CSE-A1200 Tietokannat 12.4.2016 1 / 42 Oppimistavoitteet: tämän luennon jälkeen Tiedät, mitä tarkoitetaan hakemistolla ja mitä hyötyä hakemistosta on. Tiedät, miten voidaan

Lisätiedot

2. Tietokannan tallennusrakenteet

2. Tietokannan tallennusrakenteet Tietokannan hallinta 1 2. Tietokannan tallennusrakenteet 2. Tietokannan tallennusrakenteet 2.1 Levymuisti ja sen käyttö Muistilaitteiden hierarkia: ainakin keskusmuisti levymuisti (+ muita tukimuisteja,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

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

Yksitasoisia talletusrakenteita käytetään lähinnä datatietueiden talletukseen 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

Lisätiedot

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina Kirjasto Kevät 2001 Auvinen Annemari Niemi Anu Harjoitustyö 7.4.2001 Sisällysluettelo 1. Yleiskuvaus... 3 2. Vaatimukset... 3 2.1. Toiminnalliset... 3 2.1.1. Sisäänkirjautuminen... 3 2.1.2. Nimikkeiden

Lisätiedot

Denormalisointia turvallisesti. Ougf syysseminaari 4.11.2010 Pörssitalo Helsinki Timo Raitalaakso

Denormalisointia turvallisesti. Ougf syysseminaari 4.11.2010 Pörssitalo Helsinki Timo Raitalaakso Denormalisointia turvallisesti Ougf syysseminaari 4.11.2010 Pörssitalo Helsinki Timo Raitalaakso Timo Raitalaakso Senior Database Specialist Solita Oy 2001- - 2001 Tampereen Teknillinen korkeakoulu Tietokannat

Lisätiedot

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu HELIA 1 (21) Luento 3.1 Suorituskyvyn optimointi... 2 Suunnittele... 3 Tiedonhallintajärjestelmän rakenne... 4 SQL-käsittelijä... 5 Parsinta... 5 Optimointi... 5 Tilan käsittelijä... 5 Puskurin käsittelijä

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1. Relaatiotietokannat Relaatiomalli Perustana rakennetason tietomalli (the relational model of data) perusteoria: E.F.Codd 1970 ensimmäiset kaupalliset toteutukset 70-luvun lopulla yleistynyt 80-luvun lopulla

Lisätiedot

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet ) T-79144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet 11-22) 26 29102004 1 Ilmaise seuraavat lauseet predikaattilogiikalla: a) Jokin porteista on viallinen

Lisätiedot

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto Harri Laine Helsingin yliopisto Suosion syy? Yksinkertaisuus vähän käsitteitä helppo hahmottaa Selkeä matemaattinen perusta ei tulkintaongelmia kuten esim. UML:ssä teoria käytäntö kaavio: R(A 1 :D 1, A

Lisätiedot

Action Request System

Action Request System Action Request System Manu Karjalainen Ohjelmistotuotantovälineet seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 25.10.2000 Action Request System (ARS) Manu Karjalainen Ohjelmistotuotantovälineet

Lisätiedot

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi. Algoritmien DP ja MF vertaileminen tapahtuu suoraviivaisesti kirjoittamalla kummankin leskimääräinen kustannus eksplisiittisesti todennäköisyyksien avulla. Lause T MF ave = 1 + 2 1 i

Lisätiedot

Tietotekniikan laitos Käki-projekti TIETOKANTASUUNNITELMA. 1. Johdanto

Tietotekniikan laitos Käki-projekti TIETOKANTASUUNNITELMA. 1. Johdanto Jyväskylän yliopisto SUUNNITELMA Tietotekniikan laitos 5.11.2003 Käki-projekti TIETOKANTASUUNNITELMA 1. Johdanto Suunnitelma sisältää kuvauksen tietokannan suunnittelussa käytetyistä periaatteista, kuvan

Lisätiedot

FYYSINEN SUUNNITTELU

FYYSINEN SUUNNITTELU IIO30120 DATABASE DESIGN / TIETOKANTOJEN SUUNNITTELU JA IIO30220 DATABASE MANAGEMENT / TIETOKANNAN HALLINTA FYYSINEN SUUNNITTELU KIRJAN HOVI, HUOTARI, LAHDENMÄKI: TIETOKANTOJEN SUUNNITTELU & INDEKSOINTI,

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

TIETOKANTOJEN PERUSTEET MARKKU SUNI

TIETOKANTOJEN PERUSTEET MARKKU SUNI TIETOKANTOJEN PERUSTEET MARKKU SUNI OSIO 01 Peruskäsitteitä Kurssin tavoite: antaa osallistujille valmiudet ymmärtää tietokantojen periaatteet ymmärtää tietokantojen suunnittelunäkökohtia osallistua tietokantojen

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko, Tehtävä 1 : 1 a) Olkoon G heikosti yhtenäinen suunnattu verkko, jossa on yhteensä n solmua. Määritelmän nojalla verkko G S on yhtenäinen, jolloin verkoksi T voidaan valita jokin verkon G S virittävä alipuu.

Lisätiedot

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten Ratkaisuehdotelma Tehtävä 1 1. Etsi lukujen 4655 ja 12075 suurin yhteinen tekijä ja lausu se kyseisten lukujen lineaarikombinaationa ilman laskimen

Lisätiedot

VÄLIMUISTITIETOISET PUSKURIT. Markus Montonen

VÄLIMUISTITIETOISET PUSKURIT. Markus Montonen VÄLIMUISTITIETOISET PUSKURIT Markus Montonen Sisällys 1. Johdanto 2. L1-välimuistin puskuroinnin ongelma ja ratkaisuehdotus 3. L1-välimuistin puskurioperaation kokeellinen tutkiminen 4. L2-välimuistin

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Transaktioiden samanaikaisuuden hallinta

Transaktioiden samanaikaisuuden hallinta Transaktioiden samanaikaisuuden hallinta C. Mohan, D. Haderle, B. Lindsay, H. Pirahesh & P. Schwartz: ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using

Lisätiedot

TIETOKANNANHOITAJA DBA (DATABASE ADMINISTRATOR) JA TIETOKANNAN HALLINTA

TIETOKANNANHOITAJA DBA (DATABASE ADMINISTRATOR) JA TIETOKANNAN HALLINTA TIETOKANNANHOITAJA DBA (DATABASE ADMINISTRATOR) JA TIETOKANNAN HALLINTA JOUNI HUOTARI MARTTI LAIHO (materiaali on osa virtuaaliammattikorkeakoulun Tietokantaosaaja-opintokokonaisuutta) JOHDANTO Tietokannanhoitaja

Lisätiedot

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014 Tietokanta Tietokanta on työkalu, jolla opettaja ja opiskelijat voivat julkaista tiedostoja, tekstejä, kuvia ja linkkejä alueella. Opettaja määrittelee lomakkeen muotoon kentät, joiden kautta opiskelijat

Lisätiedot

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Tietyn ominaisuuden samuus -relaatio on ekvivalenssi; se on (1) refleksiivinen,

Lisätiedot

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden

Lisätiedot

Luento 3 Tietokannan tietosisällön suunnittelu

Luento 3 Tietokannan tietosisällön suunnittelu HAAGA-HELIA / Heti-09 1 (17) Luento 3 Tietokannan tietosisällön suunnittelu Tietojärjestelmän suunnitteluprosessi... 2 Tietokannan suunnittelun tavoitteet... 3 Tietokannan suunnitteluprosessi... 4 Käsitteellinen

Lisätiedot

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Esimerkkejä vaativuusluokista

Esimerkkejä vaativuusluokista Esimerkkejä vaativuusluokista Seuraaville kalvoille on poimittu joitain esimerkkejä havainnollistamaan algoritmien aikavaativuusluokkia. Esimerkit on valittu melko mielivaltaisesti laitoksella tehtävään

Lisätiedot

B-puu. 3.3 Dynaamiset hakemistorakenteet

B-puu. 3.3 Dynaamiset hakemistorakenteet 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.

Lisätiedot

Pankkitositteen tietojen kohdentaminen

Pankkitositteen tietojen kohdentaminen 1 Pankkitositteen tietojen kohdentaminen Johdanto Pankkitapahtumien (tiliotteen) tietojen linkitys kirjanpitoon (maksutapahtumien kohdistus laskuihin) voi joskus olla työlästä (jos maksutapahtuman tiedot

Lisätiedot

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat CSE-A1200 Tietokannat 23.2.2016 CSE-A1200 Tietokannat 23.2.2016 1 / 36 Oppimistavoitteet: tämän luennon jälkeen Tunnet SQL:n perusteet ja osaat tehdä yksinkertaisia SQL-kyselyitä, esimerkiksi hakea relaatiosta

Lisätiedot

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

D B. Kyselyjen käsittely ja optimointi. Kyselyn käsittelyn vaiheet: Kyselyjen käsittely ja optimointi Kyselyn käsittelyn vaiheet: TKHJ ottaa vastaan kyselyn asiakasohjelmalta Kysely selataan ja jäsennetään tarkistetaan kyselyn rakenteellinen oikeellisuus Jäsennetty kysely

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki 9.3.2010

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki 9.3.2010 HELIA TIKO-05 1 (22) SQL SQL... 2 Historiaa... 2 Standardit... 3 Käyttö... 4 Sql-komentojen kirjoittaminen... 5 DDL... 7 Tietokantaobjektien määrittely... 7 SQL:n tietotyypit... 8 Eheyssääntöjen määrittely...

Lisätiedot

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

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi); Tietokannat SQL-peruskomentojen pikaopas CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi); INSERT INTO table VALUES(val1,val2,... ); Lisää tauluun

Lisätiedot

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot Esim yhteinen attribuutti C Liitosesimerkki T() = 10,000 riviä T() = 5,000 riviä S() = S() = 1/10 lohkoa Puskuritilaa = 101 lohkoa 1 2 Vaihtoehdot Sisäkkäiset silmukat Liitosjärjestys:, Liitosalgoritmit:

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120 Tehtävä 1 : 1 Merkitään jatkossa kirjaimella H kaikkien solmujoukon V sellaisten verkkojen kokoelmaa, joissa on tasan kolme särmää. a) Jokainen verkko G H toteuttaa väitteen E(G) [V]. Toisaalta jokainen

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,

Lisätiedot

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

HAAGA-HELIA Heti-09 1 (17) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Suorituskyky HAAGA-HELIA Heti-09 1 (17) Suorituskyky Suorituskyky... 2 Suorituskyvyn mittareita... 2 Tekninen ympäristö... 3 Suorituskyvyn optimointi... 4 Optimoinnin kohteet... 5 Fyysisen tason ratkaisut... 6 Indeksointi...

Lisätiedot

Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle.

Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle. Kombinatoriikka, kesä 2010 Harjoitus 1 Ratkaisuehdotuksia (RT (5 sivua Kaikki kurssin laskuharjoitukset pidetään Exactumin salissa C123. Malliratkaisut tulevat nettiin kurssisivulle. 1. Osoita, että vuoden

Lisätiedot

SELECT-lauseen perusmuoto

SELECT-lauseen perusmuoto SQL: Tiedonhaku SELECT-lauseen perusmuoto SELECT FROM WHERE ; määrittää ne sarakkeet, joiden halutaan näkyvän kyselyn vastauksessa sisältää

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

Lisätiedot

Transaktionhallinta. Transaktionhallinta. Transaktionhallinta. R & G Chapter 17

Transaktionhallinta. Transaktionhallinta. Transaktionhallinta. R & G Chapter 17 R & G Chapter 17 ~ samanaikaisuus Tietokannalla on tyypillisesti useita samanaikaisia käyttäjiä (prosesseja). On toivottavaa, että: Yhdenkään käyttäjän toiminta ei hidastuisi kohtuuttomasti, vaikka muita

Lisätiedot

Kuva: Ilpo Okkonen

Kuva: Ilpo Okkonen OodiHOPS OHJAAJAN OHJE 14.2.2017 Kuva: Ilpo Okkonen OodiHOPS Oulun yliopistossa Oulun yliopiston koulutusneuvosto on päättänyt, että OodiHOPS-toiminto otetaan käyttöön vähintään aloittavilla opiskelijoilla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")

Lisätiedot

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, 3.5.2007, H.Laine Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, oma nimesi, syntymäaikasi ja nimikirjoituksesi

Lisätiedot

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

Joukossa X määritelty relaatio R on. (ir) irrefleksiivinen, jos x Rx kaikilla x X, Relaation Joukossa X määritelty relaatio R on (r) refleksiivinen, jos xrx kaikilla x X, (ir) irrefleksiivinen, jos x Rx kaikilla x X, (s) symmetrinen, jos xry yrx, (as) antisymmetrinen, jos xry yrx x =

Lisätiedot

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

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja

Lisätiedot