Näytetään tekstit, joissa on tunniste tietokannat. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste tietokannat. Näytä kaikki tekstit

lauantai 19. joulukuuta 2015

PostgreSQL 9.0 High Performance

Gregory Smith, PostgreSQL 9.0 High Performance. Packt Publishing, Birmingham, UK, 2010.

Packt Publishing -kirjat ovat olleet laadultaan epätasaisia niiltä osin, kuin olen niihin perehtynyt, vaikka kirjat käyvät läpi jonkinlaisen vertaisarvioinnin. Tietokanta-asiantuntijan Gregory Smith Postgres-tietokannan suorituskykyyn pureutuva PostgreSQL 9.0 High Performance (2010) on kuitenkin kustantamon niitä parempia teoksia. Teos on tosin jo hieman vanhentunut, sillä Postgresin, eli ammattikielellä "Possun", betaversio 9.5 julkaistiin viime lokakuussa. Suorituskyvyn mittaamisesta ei tämän avoimen lähdekoodin tietokannasta ole tuoreempaa teosta, mutta toisaalta perusasiat eivät muutu kovin nopeasti.

Smithin kirja on käytännön opas suorituskyvyn mittaamiseen, ja teoriaa siinä on hyvin vähän. Tietokannan ylläpito edellyttää jatkuvaa seurantaa ja säännöllisiä testejä, joissa trendit sitten paljastavat erilaisia skaalautuvuuteen tai kuormaan liittyviä ongelmia. Ne tarjoavat myös pohjan, jonka varassa tietokannan asetuksiin on mahdollista tehdä muutoksia. Siinä se.

Laite- eli "rautatasolla" suorituskyky koostuu prosessorien, muistin (eli väliaikaismuistin) ja levyjen (eli pysyväismuistin) tehokkuudesta. Toki laitteilla on välimuisteja, väylänopeuksia jne., mutta Smith aloittaa näiden kolmen eri komponentin kuormitustesteillä. Levypintojen tai -hakuvarsien lukumäärää ei tarvitse kaivaa esiin, mutta levyn pyörimisnopeus on edelleen käypä muuttuja (tiedoksi niille jotka levyn hakunopeuksia ovat joskus laskeneet). Smith kuvailee eri tiedostojärjestelmien ja levyteknologioiden vaikutuksia tietokannan toimintaan. Esimerkiksi ilman patterivarmennettua kirjoituspuskuria muuten nopeisiin ja muuten erinomaisiin SSD-levyjen varmennukseen jää katve, jonka aikana sattuva järjestelmähäiriö voi kadottaa tietoa.

Tietokannan vasteajat riippuvat paitsi laiteresursseista myös kuormasta (eli muusta samanaikaisesta käytöstä) ja tavasta, jolla data on organisoitu tietokantaan. Smith tarjoilee joitain hyviä nyrkkisääntöjä tietokannan muistiasetuksiin; perusasetukset ovat alakanttiin. Sitäkin hyödyllisempää on tietokantasivun tai levylohkon elinkaaren esittely: rinnakkaisten kirjoitus- ja lukuoperaatioiden nopeuttamiseksi Postgres versioi tietokantarivejä, jotka sitten näkyvät eri transaktioille niiden tunnisteiden (so. juokseva järjestysnumero) mukaan. Aikanaan versiot tietysti vanhentuvat, joten ne pitää siivota pois. Vaikka automaattinen siivousoperaatio näin tekeekin, se ei vapauta levytilaa, vaan taulun lisäys- ja poisto-operaatiot aikaa myöten fragmentoivat taulun hallitseman levyalueen, jolloin laajat kyselyt johtavat yhä useamman levylohkon hakemiseen levyltä (mikä tarkoittaa pitkiä vasteaikoja). Sama koskee indeksejä: ne fragmentoituvat ja voivat siten muuttua jopa käyttökelvottomiksi. Niinpä aikaa myöten Postgresin suorituskyky heikkenee. Ongelma on tottakai ratkaistavissa, mutta se vaatii varsinkin suuremmissa tietokannoissa on monen tunnin huoltoikkunan. 

Tietokannan testaamiseen on lukuisia työkaluja, joista jotkin ovat vanhentuneet suhteessa nykyisiin datamääriin. Niillä saa kuitenkin säännöllisesti käytettynä luotettavia mittaustuloksia, jotka ehkä arvioivat kirjoitus- ja lukunopeuksia yläkanttiin, mutta joissa esiintyvien trendien muutokset kertovat mahdollisista ongelmista pellin alla. Sitten tietokannan lokeista voi koota joukon ongelmakyselyitä, joiden säännöllinen testaaminen tuottaa hyvää mittausdataa. Smith pureutuu myös kyselyiden optimointiin, indeksien käyttöön ja analyysidatan tulkitsemiseen. Edellytys suorituskyvyn parantamiseen on, kuten tuli ilmi, säännöllinen monitorointi ja huolto.

Smithin kirjassa on paljon hyvää. Selostukset erilaisista laitteista ja työkaluista on kirjoitettu samaan tapaan huolellisesti kuin kirjan keskeinen asia. Samat tiedot olisi koottavissa ehkä Postgresin sivuilta ja keskustelupalstoilta, mutta rakenteensa, kattavuutensa, esimerkkiensä ja argumentaationsa puolesta (sähköinen) kirja pitää julkaisumuotona edelleen pintansa nopeasti kehittyvänkin aiheen piirissä. Smith kirjoittaa siistiä insinöörikieltä, jonka sanasto on alan erikoistermejä lukuunottamatta väritöntä yleiskieltä.

perjantai 8. toukokuuta 2015

SQL Performance Explained

Markus Winand, SQL Performance Explained. English Edition. Markus Winand, 2012.

Relaatiotietokantajärjestelmiin liittyy jonkin verran teoriaa ja runsaasti käytäntöä. Relaatioalgebra tai normalisoidut kantamallit on kivoja ideaaleja, jotka toimiakseen edellyttävät kaikenlaista tunkkaamista, jotta vasteajat pysyvät kohtuullisina datamäärien kasvaessa.

Markus Winandin SQL Performance Explained (2012) käsittelee tietokannan suorituskykyä nimenomaan indeksien näkökulmasta. Indeksit ovat tietokantahakuja nopeuttavia tietorakenteita, jotka ovat tyypillisesti sivutettuja B-puita, vaikka muitakin muotoja on olemassa. Indeksointi nopeuttaa hakuja mutta hidastaa tietojen lisäystä ja kasvattaa levytilan ja muistin tarvetta.

Winand esittelee eri tietokantajärjestelmien erityispiirteitä ja työkaluja, mutta likaiset käytännön yksityiskohdat pysyvät etäällä. Niinpä hän konkretisoi indeksien hyödyt vaiheittain tehostuvien kyselysuunnitelmien kautta, mutta fyysisten laitteiden, levypuskurien, muistin, prosessorien tms. ominaisuudet eivät ole tämän kirjan ongelma.

Ammattilaiselle kirja on helppolukuinen, eikä uutta asiaa tule tavattomasti. Kirjan tarjoama näkemys taululiitoksiin (nested loop, hash join, sort merge) ja kyselysuunnitelmien aukilukeminen ovat tietysti hyödyllisiä, samoin indeksien anatomia. Kirja antaa keinot selvittää syyt hitaisiin kyselyihin ja teoriataustan ongelmien ratkaisemiseen, mutta ison datamäärän kanssa homma oikeastaan vasta alkaa tästä.

torstai 8. elokuuta 2013

PostgreSQL: Up and Running

Regina Obe ja Leo Hsu, PostgreSQL: Up and Running. A Practical Guide to the Advanced Open Source Database. O'Reilly Media, Sebastobol, CA, USA, 2012.

PostgreSQL on relaatiotietokannan hallintajärjestelmä. Sitä on kehitetty avoimen lähdekoodin projektina ammoisista ajoista; viimeisin julkaistu versio ilmestyi keväällä 2013. Regina Obe ja Leo Hsu ovat paikkatietojärjestelmien asiantuntijoita, ja tämä on heidän toinen yhteinen tietokirjansa.

PostgreSQL: Up and Running on helppolukuinen johdanto Postgresin käyttöönottoon ja ylläpitoon. Relaatiotietokannat ja niissä käytettävä kyselykieli SQL oletetaan tunnetuiksi. Kirjoittajat esittelevät PostgreSQL:n asetuksia, käyttäjäryhmien ja tietokantojen hallintaa, asennettavia lisäosia, varmuuskopiointia ja tähän kaikkeen käytettäviä työkaluja psql ja pgAdmin.

PostgreSQL sisältää SQL:n perustietotyypit, mutta Obe ja Hsu käyvät läpi tietokannan erikoisemmat tietotyypit kuten SERIAL-, ARRAY-, XML- ja aikatietotyypit. Tietokantataulujen, -näkymien ja -indeksien osalta PostgreSQL tarjoaa hieman standardista poikkeavia vaihtoehtoja. Talletettuja proseduureja, jotka PostgreSQL:ssä ovat yksinkertaisesti funktioita, voi kirjoittaa eri kielin, myös C:llä tai Perlillä. Kirjoittajat antavat lopuksi vinkkejä kyselyiden nopeuttamiseen ja analysointiin sekä datan replikointiin ja palveluiden pystyttämiseen.

Obe ja Hsu kirjoittavat helppolukuista englantia, joka alaan perehtyneelle avautuu vaivatta. Melkein poikkeuksetta kirja käsittelee aiheita pintapuolisesti, eikä pelkästään kirjan avulla esimerkiksi GIST- tai GIN-indeksien pystyttäminen tule onnistumaan. Tekstissä onkin paljon hyperlinkkejä internetistä löytyvään dokumentaatioon. Täten PostgreSQL: Up and Running on tiivis, noin 160-sivuinen johdanto asioihin, joita Postgresin kanssa kannattaa ottaa huomioon. Kirja tarjoaa vähän tiiviin johdannon ulkopuolella.

perjantai 27. marraskuuta 2009

Database Modeling and Design

Toby Teorey, Sam Lightstone, Tom Nadeau, Database Modeling and Design: Logical Design, fourth edition. Morgan Kaufmann, San Francisco, CA, USA, 2006.

Tietokanta on kokoelma rakenteista tietoa (esim. kalenteri, kortisto, asiakasrekisteri). Usein tietokannalla tarkoitetaan nimenomaan digitaalista relaatiotietokantaa. Database Modeling and Design on oppikirja relaatiokannan suunnitteluun ja toteutukseen. Kirjoittajista Teorey toimii professorina Michiganin yliopistossa, Lightstone on tutkijana IBM:llä, ja Nadeau puunaa järjestelmiä yritysmaailmassa.

Kirja käsittelee tietokannan elinkaaren suunnittelusta ja loogisesta mallista fyysiseen malliin, toteutukseen ja viimein tuotantoon. Sisältö keskittyy alaotsikon mukaisesti nimenomaan toiseen vaiheeseen eli loogiseen malliin: mitä käsitteitä tietosisällössä on ja miten niiden väliset suhteet tulisi kuvata. Työkaluista, joilla loogista mallia työstetään, esitellään Entity Relationship (ER) ja Unified Modeling Language (UML) -kaaviot. Sitten näytetään, miten vaatimukset otetaan huomioon suunnittelussa ja miten looginen malli kääntyy SQL-kielelle.

Taulujen normalisointiin on varattu kokonainen luku, mutta huolimatta tästä erityisesti neljäs ja viides normaalimuoto jäävät tekstin pohjalta utuisiksi. Sitten tarkastellaan online-analysointia (OLAP) ja sen vaatimuksia ja toteuttamista. Lopuksi luodaan katsaus suunnittelutyökaluihin, mikä on varmasti nopeiten vanheneva osa kirjan sisältöä.

Lukijalle herää kysymys, kenelle kirja on kirjoitettu? Onko se oppi- tai kurssikirja (tai kuten amerikkalaiset sanovat "tekstikirja")? Kirjassa on joitain tehtäviä kurssin tueksi, mutta esitetyt määritelmät ovat paikoin epäselviä, eikä konteksti tai esimerkit selitä niitä auki juuri sen paremmin. Peruskäsitteistö oletetaan jo tunnetuksi, eikä lopussa olevien tiiviiden liitteiden lisäksi SQL:n perusasioita käsitellä. Relaatioalgebraa tms. ei kirjassa käytetä. Kirja on sisällöltään  hieman kevyt, tai se on ainakin helppolukuinen, mutta tarkoitettu hieman pidemmälle ehtineille. Siten kirja sopii ehkä ammattilaisen muistinvirkistykseksi. Esimerkkien painopiste on liiketoimintapuolella ja sangen käytännöllisissä seikoissa.

O niin kuin oikeus

Kun entisen aviomiehen (so., ensimmäisen entisen aviomiehen) pienvaraston sisältö päätyy huutokaupattavaksi maksamattomien laskujen vuoksi,...