MongoDB

MongoDB

MongoDB (avledet av «humongous») er en dokumentbasert, open source, såkalt nosql-database, skrevet i C++. Det vil si at data ikke lagres i tabeller og rader som i en relasjonell database, som f.eks. MySql, men i objekter, i MongoDBs tilfelle som bson-objekter (bson = binær json). Dette gjør databasen spesielt egnet til objektorienterte programmeringsspråk, hvor man slipper å gå veien om en såkalt ORM (Object Relational Mapper). ORMs er kjent for å skalere dårlig, og MongoDB brukes spesielt innenfor det som kalles Big Data, bl.a. til å analysere loggfiler fra webservere.

Mongo er navnet på klient-programmet, som er et kraftig javascript-skall som også brukes til administrative oppgaver.

Mongod er navnet på databaseserver-programmet (som kjøres som en daemon)

MongoDB har blant annet:

Som et eksempel på hvor enkelt det kan være å bruke MongoDB skal vi lage en liten applikasjon som lagrer Twitter-meldinger i MongoDB ved hjelp av Java. Vi bruker Twitters søke-API til å hente meldingene i JSON-format, som gjør det enkelt å lagre i databasen.

Som vi vil se har MongoDB noen fordeler fremfor relasjonsdatabaser som f.eks. MySql:

  • Vi trenger ikke lage noe tabell-skjema for databasen vi skal lagre meldingene i. Når man ser nærmere på strukturen til Twitter-meldingene vil den kreve rundt 5 ulike tabeller for en normalisert relasjons-database.
  • Hver melding har et ulikt sett av attributter knyttet til seg: Noen meldinger inneholder feltet mention, noen feltet retweet, geo-lokasjon, URLer og en rekke andre ting. Dette er uproblematisk for MongoDB, som bruker skjemaløst, dokumentbasert lagring
  • MongoDB-drivere har innebygget støtte for JSON. Dette blir en stadig større fordel etter som JSON blir et foretrukket format for flere og flere nettbaserte tjenester.
  • Twitter kan legge til eller fjerne noen av egenskapene til søkeresultatet uten at det påvirker programmet vi har laget.
  • Spørring mot databasen er enklere og mer effektiv, siden vi ikke trenger å bruke avanserte JOINS lenger.

Java-driveren til MongoDB finnes her.

Her er koden som henter og lagrer Twitter-medlingene i databasen:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.util.JSON;

public class Main {

    public static void main(String args[])throws Exception {
        System.setProperty("java.net.useSystemProxies", "true");

        //Tilkobling til MongoDB
        Mongo m = new Mongo();
        // Vi lager/bruker databasen: twitter
        DB db = m.getDB("twitter");
        // Vi lager/bruker samlingen: tweets
        DBCollection coll = db.getCollection("tweets");

        //Hente meldinger fra Twitter i JSON-format med søkeordet: mongodb
        String urlstr = "http://search.twitter.com/" +
                "search.json?q=mongodb";
        URL url = new URL(urlstr);
        URLConnection con = url.openConnection();
        BufferedReader br = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        int c;
        StringBuilder content = new StringBuilder();
        while((c=br.read())!=-1) {
                content.append((char)c);
        }
       //Lagre meldingene i MongoDB-databasen        
        BasicDBObject res = (BasicDBObject)
                JSON.parse(content.toString());
        BasicDBList list;
        list = (BasicDBList)res.get("results");
        for(Object obj : list) {
            coll.insert((DBObject)obj);
        }
        m.close();
    }

}

Logg inn i Mongo-skallet ($ mongo ) for å sjekke resultatet. Følgende kommando viser alle lagrede meldinger, i JSON-format:

>use twitter
>db.tweets.find();

Takk til  for koden til dette innlegget, som er tilpasset fra hans engelske blogg.

Axenna er med og utvikler www.mongodb.no

 

Big Data Business Intelligence
Axenna kan Hadoop, Talend, MongoDB, Cassandra og SpagoBI - og hjelper gjerne til for at din satsning på Big Data skal bli en suksess. Les mer
Profesjonell konsulenthjelp
Våre eksperter omdanner dine data til tilgjengelig kunnskap med effektiv og åpen teknologi. Les mer
Kurs og opplæring
Axenna tilbyr opplæring gjennom ITFakultetet.no med sentrale lokaler i Oslo sentrum og online e-læringsportal. Gå til ITFakultetet.no