Java NoSQL: primi passi con MongoDB

17 dicembre 2012

MongoDB è un database NoSQL di tipo document: questo vuol dire che è particolarmente orientato ad un approccio alla modellazione di tipo domain driven e ad un utilizzo “ad oggetti” delle entità che decidiamo di gestire con esso, come vedremo. Non a caso è stato via via adottato in maniera crescente soprattutto in contesti, come quello Ruby On Rails e NodeJS, dove l’attenzione maggiore è rivolta ad una modellazione “agile”, alla ricerca della possibilità di rimodulare continuamente la definizione degli schema di database, e alla produttività.

In questo articolo proseguiamo l’esplorazione del mondo NoSQL con java iniziata con gli articoli introduttivi su orientDB e neo4j (anche questo database condivide con gli altri l’interfaccia tinkerpop proposta negli esempi precedenti).

Dal punto di vista java MongoDB offre ottime potenzialità di integrazione, grazie a delle api che ricordano molto il pattern DAO, e quindi non dovrebbe presentare particolari problemi, e risultare peraltro particolarmente facile da utilizzare per chi ha già esperienza con JPA, o tool per il mapping ad oggetti, quali Hybernate o Ibatis.

Installazione e configurazione di mongoDB

Per l’installazione e la configurazione di base rimandiamo all’ottima guida ufficiale:

http://docs.mongodb.org/manual/installation/

Il database è scritto in c++ e dovremo quindi installare la versione nativa adatta al nostro sistema operativo: per quanto concerne java, per i nostri esempi utilizzeremo maven:

<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongo-java-driver</artifactId>
	<version>??</version>
</dependency>

In linea generale, una volta installato il server, si dispone come di consueto di una console accessibile da riga di comando, in questo caso particolarmente semplice da utilizzare e sulla quale può essere interessante spendere qualche parola.

La console

La console è molto semplice da utilizzare: se inoltre avete conoscenze di javascript sarete ulteriormente avvantaggiati, giacché è il linguaggio utilizzato per le operazioni a riga di comando. Ad esempio per ottenere una lista dei database presenti sulla nostra installazione digiteremo:

mongo> show dbs

Infine per aggiungere un nuovo documento di nome “mongo-doc” ad una collection esistente:

mongo> db.things.insert( { name: 'mongo-doc' })

Ovviamente è nostro interesse a questo punto capire come vengano salvati i dati internamente, e quale sia la sintassi corrispondente in java.

Inseriamo il primo record!

Tanto per dare una idea l’esempio precedente diventerebbe in java qualcosa del genere:

MongoClient client = new MongoClient("localhost", 27017);
DB db = client.getDB("TestDB");
// inserimento del primo documento
DBObject jsonDocument = (DBObject) JSON.parse("{ name : 'mongo-doc' }");
db.getCollection("things").insert(jsonDocument);

Nella prima riga effettuiamo la connessione al database locale sulla porta predefinita. Successivamente scegliamo di utilizzare il database TestDB, che non esiste ancora: questo non è un errore ma una precisa scelta, poiché MongoDB creerà per noi il database se non esiste già. Allo stesso modo facciamo riferimento ad una collection things, senza doverci preoccupare di crearla prima se non esiste.

É interessante osservare come per l’inserimento dei documenti sia possibile utilizzare un oggetto di tipo DBObject. Per creare quest’oggetto avremmo potuto utilizzare le api del wrapper java:

// inserimento del primo documento
BasicDBObject document = new BasicDBObject();
document.put("name", "mongo-doc");
db.getCollection("things").insert(document);

ma nell’esempio proposto il driver java fornisce delle utilità per il parsing da json: in questo modo possiamo ragionare in maniera il più possibile simile alla console, e semplificarci un po’ la vita.

E l’autenticazione?

Come certamente avrete notato, nell’esempio proposto non abbiamo tenuto in considerazione alcuna autenticazione. Di default MongoDB assume che il driver sia eseguito su un ambiente protetto per un trusted user, quindi l’autenticazione è semplicemente disabilitata di default. In ogni caso è naturalmente possibile utilizzarla all’occorrrenza, tramite il modulo auth:

MongoClient client = new MongoClient("localhost", 27017);
DB db = client.getDB("TestDB");
boolean auth = db.authenticate("root", "root".toCharArray());

Allo stesso modo il traffico di rete sulle istanze di MongoDB è non criptato, quindi qualora si voglia esporre direttamente l’accesso ad una istanza, è bene farlo tramite opportune connessioni SSL.

Se vuoi aggiornamenti su Java NoSQL: primi passi con MongoDB inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Java NoSQL: primi passi con MongoDB

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy