Latuviitta
   Etusivu            MapServer-NoSQL

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öohjeessahttp://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")