Denne 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 Fareez Ahamed for koden til dette innlegget, som er tilpasset fra hans engelske blogg.