Tietokantajärjestelmän rakenne
Tietokannanhallintajärjestelmä on yleisesti ohjelmisto, joilla sovellusohjelmat tai käyttäjät voivat vuorovaikuttaa tietokannan kanssa. Yleisesti tietokannanhallintajärjestelmiltä odotetaan seuraavia olennaisimpia ominaisuuksia:
- Perus- eli ns. CRUD-operaatioiden suoritus tietokantaan: datan luominen (Create), etsiminen (Read), muokkaaminen (Update) ja poistaminen (Delete)
- Fyysinen tietoriippumattomuus: sovellusohjelmaa ei tarvitse muokata, vaikka tietokannan fyysinen rakenne (tietokannan sijainti, datan tallennusmuotoja tai tietokannan toimintaan tarvittavia apurakenteita) muokattaisiin
- Looginen tietoriippumattomuus: sovellusohjelmaa ei välttämättä tarvitse muokata (tai selvitään pienillä muokkauksilla) vaikka tietokannan looginen tietomalli muokattaisiin
- Tietokannan samanaikaisen käytön mahdollistaminen
- Tiedon ristiriidattomuuden eli eheyden mahdollistaminen
- Datan toisteisuuden minimointi
- Yhteensopivuus eri järjestelmien ja DBMSien kanssa
- Vaivattoman skaalautuvuuden mahdollistaminen laitteiston resurssien ja käytön mukaan
Yllä oleva lista ei ole pakollisten ominaisuuksien lista, vaan eri tietokannanhallintajärjestelmät tarjoavat niitä vaihtelevasti. Eri tuotteissa on vaihteleva määrä toiminnallisuutta aina monimutkaisimmista tuotteista kuten Oracle, DB/2 ja SQL Server yksinkertaisiin ja ominaisuuksiltaan riisuttuihin tuotteisiin kuten SQLite. Tuotteista voidaan myös tarjota erilaisia versioita (kuten Oracle Express, Standard ja Enterprise), joiden hinta määräytyy version ominaisuuksien mukaan.
Edelleen eri tuotteissa on lisäkomponentteja, tavallisesti esimerkiksi:
- Graafinen käyttöliittymä kyselyiden tekemiseen ja tietokannan rakenteen seuraamiseen
- Monitorointityökalut, joiden avulla DBMS:n suorituskykyä ja kuormitusta voidaan seurata
- Varmuuskopiointityökalut
- Työkalut datan raportointiin, analysointiin ja louhintaan
- Eräajotoiminto suurten datamäärien viemiseen tietokantaan ja tuomiseen tietokannasta
- Erilaiset väliohjelmistot DBMS:n liittämiseksi muihin tietokantajärjestelmän sisäisiin tai sen ulkopuolisiin komponentteihin
- Jaetut komponentit käyttöjärjestelmän tai käyttöjärjestelmäytimen kanssa, esimerkiksi tietokannan salaus tai pakkaaminen tai käyttäjätilien jakaminen
Tietokantakäskyn kulku
Tietokannanhallintajärjestelmän ohjaaminen tapahtuu lähettämällä tietokantakäskyjä sille. Käskyjä voidaan lähettää esimerkiksi tietokannanhallintajärjestelmän tunnistamalla kyselykielellä (esim. SQL, ks. Luku 4.1), kutsumalla tietokantaan valmiiksi tallennettuja rutiineja (esim. PL/SQL, T/SQL; ei käsitellä tässä materiaalissa) tai tietokannanhallintajärjestelmän tunnistamalla ohjelmointikielellä. Tämän lisäksi on olemassa erilaisia työkaluja, joilla esimerkiksi sovellusohjelman koodi muunnetaan kyselykielen käskyiksi (esim. ORM-työkalut, ks. Luku 6.3).
Tarkastellaan seuraavaksi yleisellä tasolla, mitä tietokantakäskylle tapahtuu, kun sovellusohjelma tai käyttäjä lähettää sen DBMS:lle. Tietokantakäsky voi olla esimerkiksi "Hae kaikkien punaisten kenkien hinta ja alennusprosentti". Yksityiskohdat riippuvat tuotteesta toiseen, mutta yleinen ajatus pätee useimmille tietokannanhallintajärjestelmille.
Sovellusohjelma lähettää pyynnön DBMS:lle yhteyden muodostamiseksi. DBMS voi evätä yhteyden esim. jos tietokantapalvelimen muisti on vähissä tai jos enimmäismäärä käyttäjiä on jo yhdistyneenä tietokantaan. Jos DBMS hyväksyy yhteyden muodostamisen, voi sovellusohjelma lähettää tietokantakäskyn.

Käskykomponentti
Lähetetty tietokantakäsky päätyy seuraavaksi DBMS:n käskykomponentille. Käskykomponentti sisältää useita alikomponentteja, joiden tarkoitus on tulkita, optimoida, muodostaa varsinaisen suunnitelman käskyn suorittamiselle ja lopuksi suorittaa käsky. Tarkastellaan lyhyesti alikomponentteja:
Parseri tarkastaa tietokantakäskyn oikeinkirjoituksen. Parseri myös kirjoittaa mahdolliset viitteet ja lyhenteet auki. Jos käskyssä on syntaksivirheitä, parseri voi sietokykynsä mukaan korjata niitä. Jos virheitä ei pystytä korjaamaan, sovellusohjelmalle palautetaan virheilmoitus. Muussa tapauksessa parseri luo kyselystä ns. jäsennyspuun (parse tree), ja lähettää sen uudelleenkirjoittajalle.
Uudelleenkirjoittaja tarkastaa tietokantakäskyn järkevyyttä ja suoritusoikeutta. Uudelleenkirjoittaja tarkastaa tietokannan metadasta, onko käskyn sisältämiä tietokantarakenteita (esim. tauluja, sarakkeita) olemassa, ja onko käskyn suorittavalla käyttäjällä tarvittavat oikeudet nähdä tai muokata niitä. Lisäksi tämä komponentti huolehtii mm. tietokantakäskyn mahdollisten laskutoimitusten, loogisten lausekkeiden ja päättelysääntöjen sievennyksestä ja keinotekoisten tietorakenteiden avaamisesta. Tuloksena uudelleenkirjoittaja tuottaa kyselypuun (query tree), joka viedään seuraavaksi optimoijalle.
Optimoija päättää, mitä datalle tulee tehdä, miten se tulee tehdä ja missä järjestyksessä se olisi parasta tehdä. Tietokannanhallintajärjestelmän kyselykielet ovat yleensä ns. deklaratiivisia kieliä, eli niillä kuvataan vain haluttu ratkaisu tai lopputulos. Esimerkiksi käsky "hae kaikkien punaisten kenkien hinta ja alennusprosentti" on deklaratiivinen käsky, sillä se ei kerro, miten varsinaisesti dataa haetaan tietokannasta. Optimoijan tehtävä onkin siis muuntaa deklaratiivinen käsky mahdollisiksi suoritussuunnitelmiksi (eli algoritmeiksi), joilla saavutetaan pyydetty tavoite. Tietokannan metadataa tarkastelemalla optimointikomponentti päättää, mikä luoduista suoritussuunnitelmista on ajallisesti nopein toteuttaa. Optimoija lähettää parhaaksi katsomansa suoritussuunnitelman eteenpäin käskyn ajajalle.
Ajokomponentti lopuksi suorittaa suoritussuunnitelman käyttäen apuna varastointikomponenttia.
Varastointikomponentti
Varastointikomponentti on eräänlainen varmistin sille, että dataa käsitellään oikein. Kun ajokomponentti aloittaa suoritussuunnitelman suorittamisen, varastointikomponentti tarkastaa mm. käskyn kannalta tärkeiden, avustavien fyysisten tietorakenteiden toiminnallisuuden. Tässä vaiheessa lokinhallintakomponentti kirjoittaa käskyn DBMS:n lokiin, ja jos käsky tekee muutoksia tietokannan rakenteeseen, nämä muutokset kirjoitetaan DBMS:n metadataan.
Seuraavaksi DBMS:n rinnakkaisuudenhallintakomponentti tarkastaa, onko samanaikaisesti käynnissä muita tapahtumia, jotka voivat haitata käsiteltävää tietokantakäskyä. Jos kaikki on kunnossa, DBMS:n lukkotauluun kirjoitetaan tietokantakäskyn käyttävien tietueiden olevan muiden samanaikaisten tapahtumien käyttämättömissä (ts. lukittuna). Lukitukseen palataan tarkemmin Luvussa 4.5.
Lopuksi muistinhallintakomponentti tekee varsinaiset kyselyt dataan tietokannan fyysista rakennetta sekä järjestelmän muistiarkkitehtuuria huomioon ottaen.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.