Skip to content

Tietokannat: NoSQL ja MongoDB

Posted in Pilvisovellusten tuotanto

Pilvisovellusten tuotanto -verkkokoulutus, oppimistehtävä 1 (24.2.). Arkkitehtuurit ja rajapinnat. Laadi 3-6 sivun selvitys (pdf) YHDESTÄ aiheesta. Palauta  ma 28.3. mennessä.

Tietokantateknologia – laadi vertailu SQL -ja NoSQL -tietokantatekniikoista. Miksi NoSQL-tietokannoista (esim. MongoDB) on tulossa suosittuja? Mitkä NoSQL-tuotteet ja -palvelut ovat suosittuja? Halutessasi voit ottaa mukaan myös RDF-tietomallin (resource description framework).

Tietokannat

Tietokanta eli tietovarasto on kokoelma tietoja, joilla on yhteys toisiinsa. Tietokanta saattaa edustaa jotain selvästi rajattua kohdetta reaalimaailmasta. Tällainen kohde voi esimerkiksi olla yrityksen asiakasrekisteri. Tietokantojen koot voivat vaihdella suuresti, yhteen tiedostoon tallennetuista taulukoista hyvin suuriin hajautettuihin tietokantoihin. [1][2]

SQL-tietokannat

Relaatio- eli SQL-tietokannat ovat taulurakenteeseen perustuvia tietorakenteita. Jokainen taulu koostuu yhdestä tai usemmasta rivistä. SQL-kannoilla on etukäteen määritelty rakenne. SQL-tietokannat ovat vertikaalisesti laajennettavissa, eli kantaa voidaan laajentaa vain jos palvelimen suorituskykyä parannetaan. SQL-kannat sopivat parhaiten eräajo-tyyppisiin ympäristöihin, jotka muuttuvat harvoin ja joissa tehdään monimutkaisia kyselyjä moneen tauluun.[9]

NoSQL-tietokannat

NoSQL on käsite, jolla kuvataan perinteisestä SQL-relaatiomallista poikkeavia tietokantoja. Nämä tietokannat eivät seuraa mitään kiinteästi määriteltyä rakennetta, minkä ansiosta tietokantoihin voidaan kirjoittaa myös ennalta määrittelemätöntä dataa. Tämän lisäksi NoSQL-tietokantoja voidaan hajauttaa useammalle palvelimelle. [2][3]

NoSQL-kannat skaalautuvat paremmin ja ovat usein suorituskykyisempiä kuin SQL-kannat. Lisäksi NoSQL-kannat:

  • Soveltuvat hyvin suurien, nopeasti muuttuvien tietomassojen käsittelyyn
  • Mahdollistavat nopean tuotekehityksen, koska tietokantamallia ja tietokantaa ei tarvitse päivittää, kun käsiteltävän datan rakenne muuttuu
  • Soveltuvat hyvin olio-ohjelmointiin, koska tietoa käsitellään oliomaisesti
  • Voidaan hajauttaa usealle palvelimelle tarpeen vaatiessa [4]

SQL- ja NoSQL-tietokantojen erot

 SQL tietokantaNoSQL tietokanta
TyypitKaikki SQL-kannat ovat samankaltaisia. NoSQL-kantoja on monenlaisia: key-value, document, wide-column ja graph.
EsimerkkejäMySQL, Postgress, Microsoft SQL Server, Oracle DatabaseMongoDB, Cassandra, HBase, Neo4j
Tiedon tallennusYksittäiset tietueet (esim. asiakastiedot) tallennetaan riveinä määriteltyyn tauluun. Rivin sarakkeet sisältävät tietueen arvot (esim. Nimi, Osoite). Rakenne muistuttaa Excelin laskentataulukkoa. Useampia tauluja voidaan yhdistää suorittamalla SQL-kyselyjä.Tiedon tallennustapa riippuu tietokannnan tyypistä. Esimerkiksi document-nosql-kantaan tiedot tallennetaan yhdessä yhtenä dokumenttina JSON- tai XML-formaatissa.
TietokantamalliRakenne ja kenttien datatyypit ovat kiinteitä ja ne pitää määritellä ennen tietokannan käyttöönottoa. Jos tietokantaan halutaan tallettaa ennen määrittelemättömiä kenttiä, niin tietokantamalli ja tietokanta pitää päivittää. Tällöin tietokanta pitää ottaa pois käytöstä.NoSQL-tietokantamallit ovat yleensä dynaamisia. Sovellukset voivat lisätä uusia kenttiä "lennosta".
LaajennettavuusSQL-kannat ovat vertikaalisesti laajennettavia. Eli SQL-kantoja voi laajentaa vain vaihtamalla palvelin tehokkaampaan malliin.NoSQL-kannat ovat horisontaalisesti laajennettavia. Eli NoSQL-kantoja voi hajauttaa usemmalle palvelimelle.
TuotekehitysmalliOsa SQL-tietokantajärjestelmistä on avointa koodia (esim. MySQL, Postgress) ja osa suljettua (Oracle Database). Kaikki NoSQL-tietokantajärjestelmät ovat avointa lähdekoodia.
TiedonkäsittelyTietoa käsitellään SQL-kyselyillä. Tietoa käsitellään olioperustaisella ohjelmointirajapinnalla.
Tiedon yhtenäisyysTietokantaan voidaan määritellä vahva tiedon eheys. Eli tietokantaan ei voi kirjoittaa ennalta määrittelmätöntä dataa.Riippuu tietokantajärjestelmästä. Esim. MongoDB:ssä tiedon eheys voidaan myös määritellä vahvaksi.
[4]

Yleisimmät NoSQL-tietokannat ja käyttökohteet

TietokantamalliEsimerkkejäKäyttökohteita
Document storeMongoDBMongoDB sopii moneen käyttöön. Esim. IoT, mobiilisovellukset, reaaliaikainen Big Data, tuote-ja palveluluettelot.
Wide column storeCassandra, HBaseBig data
Key-value storeRedisSopii moneen käyttöön. Redis on nopein NoSQL-tietokantajärjestelmä
Graph DBMSNeo4JVerkkojen ja riippuvuuksien kuvaus.
[5][6][9]

mongoDB

MongoDB

MongoDB on tällä hetkellä yleisin NoSQL-tietokantajärjestelmä ja neljänneksi yleisin tietokantajärjestelmä kaiken kaikkiaan. [5]

MongoDB on avoimen lähdekoodin dokumentti-tietokanta, joka tarjoaa korkean suorituskyvyn, käytettävyysasteen ja automaattisen laajennettavuuden.

Tietue MongoDB:ssä on dokumentti, joka rakentuu kenttä-arvo-pareista. MongoDB- dokumentit ovat samanlaisia kuin JSON-objektit. Kenttien arvot voi sisältää muita dokumentteja, taulukoita ja dokumenttien taulukoita.

Dokumentti:

{
_id: “<automaattisesti luotu yksilöllinen id>”
name: “pertti”,
age: 25,
status: “A”,
groups: [ “uutiset”, “urheilu” ]
}

[7][8]

SQL- ja MongoDB-kyselyjen erot

Tietokantojen korrelaatiot

SQLMongoDB
Table (Taulu)Collection (Kokoelma)
Row (Rivi)Document (Dokumentti)
Column (Sarake)Field (Kenttä)
RiippuvuudetLinkitys ja dokumenttien sisällyttäminen olemassaolevaan rakenteeseen.
[8]

Create

MongoDB:ssä ei ole tarvetta luoda taulurakennetta. Dokumentin rakenne luodaan automaattisesti kun ensimmäinen dokumentti lisätään kokoelmaan. Tyhjän kokoelman voi luoda createCollection-komennolla.

SQL: CREATE TABLE `posts` ….
MongoDB: db.createCollection(“posts”)

Insert

Tiedot tallennetaan MongoDB:hen avain-arvo-pareina. Lisätylle dokumentille luodaan yksilöllinen id automaattisesti.

SQL: INSERT INTO `posts` ( ….)
MongoDB: db.posts.insert ({user_name: “pertti”, post_text: “blaa”…

Read

Haetaan kaikki rivit tietokannasta.

SQL: SELECT * FROM `posts`
MongoDB: db.posts.find()


SQL: SELECT * FROM `posts` WHERE `user_name` = “pertti”
MongoDB: db.posts.find({user_name: “pertti”})

Update
Ensimmäinen parametri määrittelee hakukriteerin, toinen parametri määrittelee päivitysoperaation. Oletusarvoisesti MongoDB päivittää vain ensimmäisen löydetyn dokumentin.

SQL: UPDATE posts SET post_privacy = “private” WHERE …
MongoDB: db.posts.update({user_name=“pertti”},{$set:{post_privacy: “private”})

Remove

Dokumenttien poistaminen on yksinkertaista ja samanlaista kuin SQL:ssä

SQL: DELETE FROM posts WHERE user_name=“pertti”
MongoDB: db.posts.remove({user_name:”pertti”})

Yhteenveto

NoSQL- ja erityisesti MongoDB-kannat ovat yleistyneet koska ne ovat helppokäyttöisiä, suorituskykyisiä, laajennettavia ja helposti muokattavia. Ne sopivat hyvin nopeasti muuttuvaan ympäristöön, jossa tiedon määrä lisääntyy nopeasti ja sen muoto voi vaihdella suuresti.

Linkkejä

 

Lähdeluettelo:

[1] – https://fi.wikipedia.org/wiki/Tietokanta
[2] – https://fi.wikipedia.org/wiki/NoSQL
[3] – http://dba.stackexchange.com/questions/4508/what-does-horizontal-scaling-mean
[4] – https://www.mongodb.com/nosql-explained
[5] – http://db-engines.com/en/ranking
[6] – https://www.mongodb.com/use-cases
[7] – https://docs.mongodb.org/manual/introduction/
[8] – http://code.tutsplus.com/articles/mapping-relational-databases-and-sql-to-mongodb–net-35650
[9] – http://www.thegeekstuff.com/2014/01/sql-vs-nosql-db/

Viimeisimmät artikkelit

Kategoriat