Mikä on tietokantamoottori?
Tietokantamoottori on tietokannanhallintajärjestelmän keskeinen osa, joka vastaa tiedon fyysisestä tallentamisesta, hakemisesta ja käsittelystä. Usein puhutaan storage engine -käsitteestä, joka tarkoittaa samaa asiaa. Moottori määrittelee, miten tiedot järjestetään levyllä, millaisia indeksejä käytetään ja miten tapahtumia hallitaan. Ilman moottoria tietokanta olisi vain kokoelma tiedostoja, joilla ei ole yhteistä logiikkaa. Jokainen tietokantamoottori on suunniteltu tiettyyn käyttötarkoitukseen, ja oikean moottorin valinta vaikuttaa suoraan sovelluksen suorituskykyyn ja skaalautuvuuteen.
Moottori toimii tietokantajärjestelmän alimpana kerroksena, joka kommunikoi käyttöjärjestelmän ja laitteiston kanssa. Se huolehtii muun muassa luku- ja kirjoitusoperaatioiden optimoinnista, välimuistinhallinnasta ja samanaikaisten käyttäjien pääsystä tietoihin. Esimerkiksi MySQL tarjoaa useita eri moottoreita, kuten InnoDB ja MyISAM, joista jokaisella on omat vahvuutensa. PostgreSQL puolestaan käyttää oletusarvoisesti omaa moottoriaan, joka tunnetaan vahvasta ACID-tuesta.
Tietokantamoottorin päätehtävät
Tietokantamoottorin tehtävät voidaan jakaa viiteen pääalueeseen: tallennus, tapahtumahallinta, eheyden valvonta, tehokas haku ja järjestelmäkatalogin ylläpito. Tallennus tarkoittaa tiedon fyysistä sijoittamista levyllä. Moottori päättää, millaisia tietorakenteita käytetään – esimerkiksi B-puita, hajautustauluja tai lisäysjärjestettyjä tiedostoja. Tapahtumahallinta varmistaa, että useat samanaikaiset operaatiot eivät sotke toisiaan. Eheyden valvonta takaa viite-eheyden ja rajoitteiden noudattamisen. Tehokas haku on mahdollista indeksien avulla, joita moottori ylläpitää automaattisesti. Järjestelmäkatalogi säilyttää metatietoja tauluista, sarakkeista ja käyttöoikeuksista.

Moottori vastaa myös vikasietoisuudesta. Esimerkiksi InnoDB käyttää lokitiedostoja, joiden avulla palautuminen onnistuu sähkökatkon jälkeen. Lisäksi moottori hallinnoi välimuistia, jotta usein kysytyt tiedot pysyvät nopeimmassa muistissa. Kaikki nämä toiminnot tapahtuvat taustalla, eikä sovelluskehittäjä yleensä näe niitä suoraan. On kuitenkin tärkeää ymmärtää moottorin ominaisuuksia, kun suunnitellaan suorituskykyistä tietokantaratkaisua.
Ero tietokantamoottorin ja tietokannanhallintajärjestelmän välillä
Monet sekoittavat tietokantamoottorin koko tietokannanhallintajärjestelmään. Tietokannanhallintajärjestelmä on laaja kokonaisuus, joka sisältää käyttöliittymän, kyselykielen kuten SQL:n, käyttäjien hallinnan, varmistustoiminnot ja paljon muuta. Moottori on sen sisällä oleva mekaniikka, joka todella käsittelee dataa. Voit ajatella sitä autona: tietokannanhallintajärjestelmä on koko auto ohjauspyörineen ja kojetauluineen, moottori on se, joka liikuttaa pyöriä.
Käytännössä sama tietokannanhallintajärjestelmä voi tukea useita eri moottoreita. Esimerkiksi MySQL:ssä taulukohtainen moottorin valinta on mahdollista. Yksi taulu voi käyttää InnoDB:tä, toinen MyISAMia. Tämä joustavuus mahdollistaa optimoinnin sovelluksen eri osa-alueille. Toisaalta jotkut järjestelmät, kuten SQLite, käyttävät kiinteää moottoria, jota ei voi vaihtaa. Valinta riippuu siitä, tarvitaanko esimerkiksi tapahtumatietoista tallennusta vai maksimaalista lukunopeutta.

Tietokantamoottorien tyypit ja esimerkkejä
Tietokantamoottorit voidaan jakaa kahteen pääluokkaan: relaatio- ja ei-relaatiomoottoreihin. Relaatiomoottorit perustuvat tauluihin ja niiden välisiin suhteisiin. Ne käyttävät SQL-kieltä ja takaavat yleensä vahvan tapahtumaturvallisuuden. Toinen luokka ovat ei-relaatiomoottorit, jotka tallentavat tietoa esimerkiksi avain-arvo-pareina, dokumentteina tai graafeina. Ne ovat usein joustavampia skeeman suhteen ja skaalautuvat hyvin horisontaalisesti.
Suosituimpia relaatio- ja dokumenttimoottoreita on esitetty alla olevassa taulukossa. Taulukko auttaa hahmottamaan eri moottorien ominaisuuksia ja tyypillisiä käyttötarkoituksia.
| Moottori | Tyyppi | Käyttökohde |
|---|---|---|
| InnoDB | Relaatio | Verkkosovellukset, tapahtumat |
| MyISAM | Relaatio | Suuret lukumäärien taulut, arkistot |
| MongoDB | Dokumentti | Sovellukset, joissa joustava skeema |
| Cassandra | Avain-arvo | Hajautetut järjestelmät, big data |
| PostgreSQL | Relaatio | Monimutkaiset kyselyt, sijaintitiedot |
InnoDB on MySQL:n oletusmoottori ja tarjoaa ACID-yhteensopivan tapahtumahallinnan. MyISAM on vanhempi moottori, jonka luktuotanto on nopea, mutta se ei tue tapahtumia. MongoDB-edustaa dokumenttimoottoreita ja tallentaa tiedot BSON-muodossa. Cassandra puolestaan on suunniteltu erittäin suurille tietomäärille, ja se toimii ilman yhden vikaantumispisteen riskiä. PostgreSQL omaa oman moottorinsa, joka tunnetaan laajennusmahdollisuuksistaan.

Suorituskyky ja tietokantamoottorin valinta
Moottorin valinta vaikuttaa ratkaisevasti tietokannan suorituskykyyn. Tärkeitä tekijöitä ovat lukemis- ja kirjoitusnopeus, tapahtumatuki, indeksointimahdollisuudet ja samanaikaisuuden hallinta. Jos sovellus tarvitsee paljon tapahtumia, kuten pankkisiirrot, on valittava moottori, joka tukee ACID-ominaisuuksia. InnoDB on tässä hyvä valinta, koska se lukitsee rivitason ja pitää lokia. Toisaalta jos sovellus tekee pääasiassa valtavia lukuhakuja, kuten analytiikkatyökalut, MyISAM saattaa olla nopeampi, koska se lukitsee koko taulun ja käyttää vähemmän muistia yleiskustannuksiin.
Samanaikainen käyttö on toinen kriittinen tekijä. InnoDB käsittelee samanaikaiset tapahtumat paremmin kuin MyISAM, koska se käyttää moniversio- ja rivitason lukitusta. MyISAM lukitsee koko taulun kirjoituksen ajaksi, mikä hidastaa monen käyttäjän tilanteita. Ei-relaatiomoottorit, kuten Cassandra, on suunniteltu skaalautumaan tuhansille palvelimille ja kestämään korkeaa kirjoituskuormaa. Niiden suorituskyky perustuu hajautettuun arkkitehtuuriin ja oletukseen, että verkkoviiveet voivat olla suuria.
Lista tyypillisistä valintakriteereistä moottorille:

- Tarvitaanko tapahtumien ACID-tukea?
- Onko sovelluksessa paljon lukuja vai kirjoituksia?
- Tarvitaanko monimutkaisia liitoksia ja kyselyitä?
- Skaalaudutaanko pystysuunnassa (yksi kone) vai vaakasuunnassa (useita koneita)?
- Onko tietorakenne joustava vai tiukasti määritelty?
- Tarpeeton datahäviön sieto: vaaditaanko automaattista palautumista?
Käytännön esimerkki: Verkkokauppa ja blogi
Verkkokauppa tarvitsee tapahtumatietoja, koska asiakkaat tekevät tilauksia ja maksuja. Samanaikaisuus on korkea, joten moottorin on käsiteltävä monta kirjoitusoperaatiota yhtä aikaa. InnoDB sopii tähän hyvin. Blogissa taas on paljon lukuja ja vähän kirjoituksia. Blogin kommentit ja artikkelit voidaan tallentaa MyISAMilla, koska harvoin kaksi käyttäjää kirjoittaa samaan tauluun yhtä aikaa. Yksi projekti saattaa jopa käyttää molempia moottoreita: tilaukset InnoDB:llä, sivuston tilastot MyISAMilla. Tämä on mahdollista MySQL:ssä.
MongoDB:ää voidaan käyttää verkkokaupan tuoteluettelossa, jossa tuotteiden attribuutit vaihtelevat paljon. Relaatiomalli vaatisi lukuisia liitostauluja, mikä hidastaisi hakuja. Dokumenttimuotoinen tallennus nopeuttaa kehitystä ja skaalautuu hyvin. Monissa moderneissa web-sovelluksissa yhdistellään eri moottoreita samassa arkkitehtuurissa. Oleellista on ymmärtää, että moottorin valinta ei ole kertapäätös, vaan sitä voidaan myöhemmin muuttaa, vaikka se vaatii usein tietojen uudelleenjärjestelyä.
Tietokantamoottorit eri SGBD-järjestelmissä
MySQL on tunnettu moottorivalikoimastaan. InnoDB on nykyisin oletus, ja se korvasi MyISAMin, mutta MyISAM on edelleen käytettävissä erikoistapauksissa. MariaDB, MySQL:n haarautuma, tarjoaa lisäksi Aria-moottorin, joka yhdistää MyISAMin nopeuden ja InnoDBn tapahtumatuki. PostgreSQL käyttää yleensä omaa moottoriaan, jota voidaan laajentaa taulukkokohtaisesti esimerkiksi TimescaleDB:n avulla aikasarjadataa varten.

Ei-relaatiojärjestelmissä moottorit ovat usein tiiviisti integroituja. MongoDB:n WiredTiger on oletusmoottori, joka tarjoaa pakatut tallennustiedot ja monitasoisen samanaikaisuuden. Cassandra käyttää omaa moottoriaan, joka perustuu lokirakenteisiin ja kompaktointiin. Yhteistä kaikille moottoreille on se, että ne pyrkivät maksimoimaan suorituskyvyn ja luotettavuuden tietteenomaisella suunnittelulla.
Viitteet
Lähteiden avulla voit syventää tietämystäsi tietokantamoottoreista. Alla on mainittu tässä artikkelissa hyödynnetyt lähteet.
Wikipedia – Mecanismo de armazenamento. https://pt.wikipedia.org/wiki/Mecanismo_de_armazenamento
AppMaster – Motor de base de dados. https://appmaster.io/pt/glossary/motor-de-base-de-dados
Profissão Cloud – O que é engine de banco de dados. https://profissaocloud.com.br/glossario/o-que-e-engine-de-banco-de-dados/
Looqbox – O que são bancos de dados e para que servem? https://looqbox.com/blog/banco-de-dados/
DevMedia – MySQL Engine: conhecendo as engines do MySQL. https://www.devmedia.com.br/conhecendo-as-engines-do-mysql/37433





