NoSQL-ominaisuuksien hyödyntäminen OGC:n verkkopalveluissa
Kiinteä ja ei-kiinteä tietorakenne
OGC:n (Open Geospatial Consortium) verkkopalvelut, kuten WMS ja
WFS, nojautuvat perinteiseen tietomalliin, jossa paikkatietoaineistoilla
on tiukasti määritelty rakenne eli skeema. Esimerkkejä skeemasta voi
hakea esimerkiksi WFS-palveluista tekemällä
DescribeFeatureType-pyynnön. Tämä pyyntö palauttaa Maanmittauslaitoksen
kunta-aineiston skeeman:
http://188.64.1.61/cgi-bin/tinyows?service=WFS&version=1.1.0&request=DescribeFeatureType&typeName=lv:mml_kunta1_p
Skeema merkitsee, että jokaiselle paikkatietokohteelle on etukäteen
määrätty, mitä ominaisuustietoja sille voidaan antaa ja mitä
tietotyyppiä ominaisuudet ovat (merkkijono, kokonaisluku, desimaaliluku
jne.). Jos kohteelle halutaan antaa uusia ominaisuustietoja, niin se on
mahdollista vain muuttamalla ensin skeemaa ja lisäämällä siihen paikka
uudelle tiedolle. Skeeman muutos vaikuttaa kuitenkin aineiston kaikkiin
kohteisiin, ja vaikka lisätieto olisi tarpeen vain muutamalle aineiston
kohteelle, niin skeeman muutoksen jälkeen uusi ominaisuustieto on
kaikilla kohteilla, vaikkakin suurimmalla osalla kohteista sen arvo voi
olla tyhjä. Skeeman muuttamisen jäykkyyden takia skeemaan onkin usein
määritelty jonkinlainen miljoonalaatikko (lisätietoja, huomautus tms.),
johon voidaan syöttää kohteesta sellaisia tietoja, jotka eivät sovi
varsinaiseen skeemaan.
Kiinteästä skeemasta voidaan luopua myös kokonaan ja jättää
jäljelle pelkkä miljoonalaatikko. Kohteiden ominaisuustiedot liitetään
niihin niihin ikään kuin tarralapuilla: kunta=Saarijärvi,
kaupunki=kyllä, maakunta=Keski-Suomi, kieli_ni1=suomi. Tarralapuista
käytetään nimitystä avain-arvo-pari, ja paikkatietojen yhteydessä ajatus
saattaa olla tuttu OpenStreetMap-projektista, jossa kohteiden
ominaisuudet annataan tageiksi kutsutuilla avain-arvo-pareilla.
Tietokannoista, jotka eivät ole perinteisiä relaatiotietokantoja,
käytetään puolestaan usein nimitystä NoSQL-tietokanta.
Kun kiinteä tietomalli ei oikein toimi
Elävästä elämästä on helppo löytää tapauksia, jotka on vaikea puristaa kiinteään tietomalliin. Esimerkiksi suuren Lego-laatikon järjestäminen niin, että kaikki osat löytyisivät välittömästi omalta paikaltaan on kokemuksen perusteella mahdotonta. Paikkatietojen osalta OpenStreetMap-projekti osoittaa, mitä tapahtuu, jos luokittelu ei tapahdu perinteiseen tapaan ylhäältä alaspäin, jolloin ammattilaiset ensin määrittelevät tietojen rakenteen ja käyttäjien tehtävänä on alistua siihen. OpenStreetMap:issa käyttäjillä on alusta alkaen ollut mahdollisuus liimata kohteisiin rajoittamaton määrä mitä tahansa tarralappuja. Tuloksena esimerkiksi yksin Suomen alueelta OSM-aineistossa on käytössä pitkästi yli 3000 erilaista avainta. Ajantasaisen tilanteen voi tarkastaa TagWatch-linkistä
Latuviitan sekamalli eli miljoonalaatikolla tehostettu relaatiokanta
Latuviitan verkkopalveluissa käytettävät OpenStreetMap-aineistot on
tallennettu relaatiotietokantaan, jossa on mukana tiettyjä
NoSQL-ominaisuuksia. Tietokannan OSM-tauluihin on tallennettu kohteiden
geometriat sekä joukko yleisesti käytettäviä ominaisuustietoja
normaalin kiinteän skeeman mukaan. Tauluissa on kuitenkin mukana myös
tags-niminen sarake, jonka tietotyyppi on "hstore" ja joka toimii siten
avain-arvo-parivarastona. Tässä on esimerkkinä erään OSM-pisteen
tags-kentän sisältö:
tags>"dir_ref"=>"AK", "manhole"=>"water", "diameter"=>"400", "marker:L"=>"yes", "marker:label"=>"9.kierr.", "marker:shape"=>"vertical oval on a rectangle", "hole:diameter"=>"20 cm", "marker:colour"=>"black", "marker:label:colour"=>"yellow"
Näistä ominaisuustiedoista ei yksikään ole mukana taulun kiinteässä skeemassa, ja siitä syystä niiden perusteella on mahdotonta tehdä ominaisuustietoihin perustuvia hakuja normaalin WFS-rajapinnan kautta. Latuviitan MapServer-OWS -palveluissa tämä on kuitenkin mahdollista, sillä ne tukevat myös hakuehtojen välittämistä palvelimelle SQL-muodossa, ja sen ansiosta näistä palveluista voidaan tehdä hakuja myös minkä tahansa
avain-arvoparin perusteella.
Taustatietoa: SQL-kyselyt PostgreSQL-kannan hstore-kentästä
Hstore-kentästä voidaan tehdä kyselyitä SQL-kielellä, mutta kyselyissä on käytettävä erityisesti htore-tietoja varten tehtyjä operaatioita ja funktioita. Ne on esitetty
PostgreSQL-käyttöohjeessa http://www.postgresql.org/docs/current/interactive/hstore.html.
Onneksi käyttäjän ei pakko ymmärtää, mistä on kyse, sillä tavallisimmin tarvittavat kyselyt voidaan rakentaa muokkaamalla oheisia mallikyselyitä ja mahdollisesti yhdistämällä niitä AND tai OR -ehdoilla.
Valinta yhden avain-arvo-parin perusteella (bussipysäkit, OSM:ssa käytetty tag "highway=bus_stop")
SELECT * from osm_pisteet WHERE (tags @> 'highway=>bus_stop');
Valinta avaimen perusteella; avain on oltava olemassa, mutta sen arvolla ei ole väliä (kaikki kaupat, OSM:ssa merkittyä tagilla "shop")
SELECT * from osm_pisteet WHERE (tags ? 'shop');
Yhdistelmävalinta, jossa poimitaan yksi avain-arvo-pari, joilla ei ole tiettyä muuta tagia (valtatiet, joilta puuttuu nopeusrajoitustieto)
SELECT * from osm_viivat WHERE (tags @> 'highway=>primary') AND not (tags ? 'maxspeed')
Hstore-kysely upottaminen WMS:ään ja WFS:ään
Esimerkki WFS-pyynnöstä, joka hakee Latuviitan MapServer WFS -palvelusta kohteet, joille on tietokantaan tallennettu tieto marker:label:colour=yellow
WMS-pyyntö, joka valitsee tietokannasta kaikki valtatiet ("highway=primary")
|