SQL on tiensä päässä
Tietokannat ovat olleet kuluneen vuoden kuumin puheenaihe web-kehittäjien keskuudessa. Mysql:n siirryttyä käytännössä Oraclen omistukseen moni on ihmetellyt, mikä motivaatio tietokantajätillä on ylläpitää ilmaista kilpailijaa maksullisille tuotteilleen. Ei ole ihme, että Mysql:n avoimesta lähdekoodista haarautuneet vaihtoehtoiset projektit herättävät mielenkiintoa. Näitä ovat esimerkiksi Drizzle sekä Monty Wideniuksen oma Mariadb.
Drizzle on kiinnostava projekti, joka keskittyy parantamaan Mysql:n skaalautuvuutta ja soveltuvuutta pilvipalveluiden alustaksi. Tavoitteena on karsia tuotteesta pois tarpeettomat ominaisuudet, kuten tallennetut proseduurit, näkymät ja käyttäjätunnukset. Niiden sijaan keskitytään tekemään ydintoiminnallisuudesta tehokasta ja yksinkertaista.
Sql-pohjaisille tuotteille on kuitenkin hyvää vauhtia putkahdellut uudenlaisia kilpailijoita, jotka on ristitty yhteisesti Nosql-tietokannoiksi. Avoimen lähdekoodin puolella tunnetuimpia näistä ovat Facebookin julkaisema Cassandra sekä Apache-projektin kehittämä Couchdb. Pilvioperaattoreilla on puolestaan omat palvelunsa, joista suurimpia ovat Googlen Bigtable sekä Amazonin Simpledb.
Nosql-tekniikan suuri oivallus on, ettei relaatiotietokannoissa ole oikeastaan mitään järkeä, koska nykyajan sovellusten rakenne ei vastaa enää lainkaan perinteistä relaatiomallia. Modernit webbisovellukset käsittelevät tietoa mieluiten json-muotoisina objekteina, joita liikutellaan sellaisenaan esimerkiksi Ajax- ja Rest-rajapintojen yli. Tietorakenteet ovat moniulotteisia, ja niihin lisätään koko ajan uusia kenttiä sovellusten kehittyessä.
Miksi näitä tietorakenteita oikeastaan edes pitäisi yrittää ujuttaa relaatiotietokantaan? Couchdb:n ja Mongodb:n kaltaiset tuotteet osaavat varastoida json-objektit tietokantaan sellaisenaan. Sovelluksesta katoaa valtava määrä turhaa monimutkaisuutta, kun perinteinen object-relational-mapping voidaan jättää pois. Tietokantojen skeemojakaan ei tarvitse enää pitää ajan tasalla jokaisen päivityksen yhteydessä, koska skeemoja ei näissä ratkaisuissa tarvita lainkaan.
Nosql-teknikkaa käyttämällä myös sovellusten skaalautuvuus paranee olennaisesti. Relaatiotietokantojen jäyhät käsitteet kuten transaktiot ja automaattiset id-numerot jäävät pois. Ne ovat tehokkaasti estäneet tietokantojen hajauttamisen usealle palvelimelle. Nosql-tietokannoissa käytetään niiden sijaan relaxed consistency -mallia ja uuid-tunnisteita. Yhtäkkiä tietokannan voikin hajauttaa kymmenelle, sadalle tai vaikkapa tuhannelle palvelimelle.
Sql-tietokantojen käyttöön on oikeastaan jäljellä enää kaksi hyvää syytä. Toinen on se, että nykyiset tietokantatuotteet ovat kypsiä ja luotettavia, kun taas useimmat Nosql-projektit ovat vielä versiossa 0.x. Tilanne kuitenkin korjaantuu hyvää vauhtia, ja ensi vuonna tullaan varmasti näkemään monien projektien 1.0-versiot.
Toinen syy on siinä, että lukemattomat blogi- ja julkaisujärjestelmät on rakennettu sql:n varaan, eikä niitä ole ihan triviaalia muokata toimimaan Nosql-tietokantojen kanssa. Vahvana veturina tässä siirtymässä toimii kuitenkin Google, jonka tarjoama App Engine -palvelu on hyvin mielenkiintoinen alusta uusille web-sovelluksille. App Enginen käyttö edellyttää Googlen oman Bigtable-rajapinnan integroimista sovelluksiin, joten se motivoi osaltaan siirtymistä Nosql-maailmaan. Kun sovellus on kerran integroitu Googlen tietokantaan, se on suhteellisen helppoa liittää myös esimerkiksi Couchdb:hen.
Nähtävissä on siirtymäkausi, joka kestänee vuosikymmeniä. Selvää on, että sql:n kehitys on webbisovellusten kannalta pysähtynyt. Nosql-tuotteet pystyvät tarjoamaan paljon tehokkaampia ja skaalautuvampia ratkaisuja, mutta niiden kypsyminen ja käyttöönotto tapahtuu asteittain. Tällä välin sovelluskehittäjien kannattaa harkita, voiko sovellukset rakentaa jo nyt siten, että siirtyminen Nosql:ään on mahdollisimman kivutonta.
Sql jää luultavasti joka tapauksessa elämään hybridiratkaisuissa, joissa transaktio-ominaisuudet ovat tärkeitä. Virtuaalisen valuutan ja maksujen käsitteleminen on hyvin haasteellista ilman transaktioita. Käyttäjäsessiot on kuitenkin nykyään järkevämpää tallentaa vaikkapa Tokyo Tyrant -tietokantaan, ja dokumenttialustaksi taas sopii paremmin esimerkiksi Couchdb. Mutta nyt sql ei ole enää se ainoa oikea ratkaisu kaikkeen tiedon varastointiin.








