maanantai 16. tammikuuta 2012

Versioi tietokantasi!


Mitä on tietokannan versiointi? Tietokannan versiointi tarkoittaa sitä, että tietokannasta pystyy selvittämään helposti tietokannan skeeman version sekä mahdollisesti tietokantaan skripteillä ajetun datan version.

Mitä hyötyä on tietokannan versioinnista? Tietokannan versiointi mahdollistaa tietokannan sisältämän tiedon systemaattisen ylläpidon. Saman tietokannan eri versioiden päivittäminen uudempaan versioon on helppoa, mikäli tietokannan sisällöstä voi koska tahansa päätellä mitä päivityksiä tietokannasta puuttuu. Versioiminen mahdollistaa päivityspolkujen rakentamisen. Jos et tiedä missä tilassa tietokanta on, et voi mitenkään toteuttaa tietokantapäivityksien automaatiota, eivätkä käsin tehtävät päivityksetkään ole helppoja.

Jotta versiointia voi tehdä, pitää tietokantaan lisätä tietokannan versiota kuvaava taulu. Kenties yksinkertaisin tapa tietokannan versioimiseen on sisällyttää tietokantaa päivittäviin komentosarjoihin alkuun tietokannan versiotaulua päivittävä komento. Jokainen komentosarja voi lisätä versiotauluun rivin, jossa kerroataan komentosarjan sisältävän tiedoston nimi ja sen yksikäsitteisesti tunnistava versionumero. Huonoa ratkaisussa on se, että versiotaulun päivitys unohtuu helposti ja komentoja ajetaan ilman versiotiedon päivittämistä.

Hieman edistyneempi ratkaisu on luoda tietokannan päivityksiä varten oma sovelluksensa. Sovellus voi olla pelkkä komentotulkin varassa toimiva käskysarja. Kun sovellusta käsketään päivittämään tietokanta, sille annetaan versionhallinnassa oleva tiedosto parametrina. Sovellus hakee versionhallinnasta tiedoston, tarkistaa että tiedosto sopii päivitykseksi kohdetietokannalle, päivittää tietokannan sisällön tiedoston mukaan ja lopuksi muuttaa tietokannan versiotaulun ajan tasalle. Sovelluksen käyttäminen jättää tietokantaa päivittävälle ihmiselle vähemmän erehtymisen mahdollisuuksia.

Kehitystyössä on hankalaa toimia usean erillisen tietokantaa eri versioihin päivittävän tiedoston kanssa. Yleensä on helpompaa, jos kehittäjällä on käytössä yksi (tai muutama) tiedosto, jolla voi alustaa tyhjän tietokannan kehityskäyttöön sopivaksi ilman pitkän päivitysketjun seuraamista. Kehitystyön aikana onkin järkevää ylläpitää yksinkertaista tapaa luoda ajantasainen tietokanta. Kun projekti etenee uuden version julkaisuvaiheeseen, tutkitaan minkälainen ero on edellisen julkaisun ja uuden julkaisun tietokantojen kesken. Tämän pitäisi olla helppoa, mikäli edellisen version tuottamasta tietokannasta voi tarkistaa helposti version (versionhallinnasta sitten näkee edellisen version tietokannan luovat komennot). Sovelluksen päivittäminen tuoreeseen versioon tuotannossa on turvallista, koska sovelluksen päivityksessä voidaan helposti tarkistaa, että sovelluksen mukana päivitettävä tietokanta on tietyn versioinen. Erityisen tärkeitä tarkistukset ovat tilanteessa, jossa tuotantokäytössä voi olla samaan aikaan useaa eri versiota samasta sovelluksesta. Jos tuotannon versiota ei tarkisteta ennen päivitystä ja uusin versio vaatii useamman päivitystiedoston käyttämistä, saattaa joku päivityspolun vaatimista päivityksistä jäädä tekemättä ja esimerkiksi vain viimeisin päivitys tulee ajettua tietokantaan.

Usein tietokannan skeeman voi tuottaa suoraan lähdekoodista. Itse en suosittelisi tietokannan automaattista luomista kehityskäytössä lähdekoodin perusteella. On parempi, että kehitysaikanakin tietokannan skeeman kehitys hallitaan versionhallintaan talletettavien tiedostojen kautta. Lähdekoodin muutokset voivat joskus varsin yllättäen vaikuttaa siitä generoitavaan skeemaan ja toisaalta versionhallinasta voidaan koko ajan seurata skeeman kehitystä koodiin verrattuna. Jos testaus suoritetaan aina versionhallinassa olevaa skeemaa vastaan, jäävät koodin toimintaan vaikuttavat muutokset kiinni jo kehitysaikaisessa testauksessa, koska versionhallinasta tuleva skeema ei muutu automaattisesti lähdekoodin mukaiseksi.

Mitä haittaa on tietokannan versioinnista? Tietokannan versioinnista ei ole mitään suoranaista haittaa, mutta jonkin verran lisätyötä versiointi vaatii. Työmäärä on luultavasti kuitenkin vähäisempi kuin myöhemmin epämääräisistä tietokantaversioista huolehtimiseen käytettävä aika. Ainakin riskit epäonnistuneisiin tietokantapäivityksiin pienentyvät. Lisäksi tietokantaa käyttävän sovelluksen päivitykset helpottuvat, kun aina voidaan sanoa mitä tietokantapäivityksiä kunkin version asentaminen vaatii.

Jos projektisi tietokantaa ei ole vielä versioitu, juuri nyt on hyvä aika aloittaa versiointi!

Ei kommentteja:

Lähetä kommentti