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.