Lagre Twitter-meldinger i MongoDB med Java

Twitter-LogoDenne artikkelen viser hvor enkelt det er å lagre 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 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.


Tagged: , ,

Skriv en kommentar