UNIVERSITÀ DEGLI STUDI DI MILANO
Dipartimento di Informatica

MongoDB e basi di dati NoSQL

Insegnamento di Analisi dei dati su larga scala
Anno accademico 2013/14

RDBMS più diffusi

Welcome to NoSQL!

MongoDB e basi di dati NoSQL

I più diffusi

Un buon posto per valutare le differenze tra le varie soluzioni è questo post.

MongoDB e basi di dati NoSQL

Perché?

MongoDB e basi di dati NoSQL

MongoDB

MongoDB (http://www.mongodb) è un sistema open source per la gesione di database NoSQL (document-oriented) sviluppato da 10gen (http://www.10gen.com/)

Storia

MongoDB e basi di dati NoSQL

Ma ha anche dei lati deboli

MongoDB e basi di dati NoSQL

Nei RDBMS classici...

MongoDB e basi di dati NoSQL

Nei DB NoSQL...

MongoDB e basi di dati NoSQL

In MongoDB

MongoDB e basi di dati NoSQL

JSON: carte sintattiche

MongoDB e basi di dati NoSQL

Un esempio

MongoDB e basi di dati NoSQL

Per la precisione...

Il formato in cui effettivamente MongoDB memorizza l'informazione è BSON (Binary JSON, http://bsonspec.org/), che permette di

MongoDB e basi di dati NoSQL

Documenti incorporati

È possibile inserire un documento all'interno di un campo BSON

{
    "nome": "Paolino",
    "cognome": "Paperino",
    "auto": {"modello": "American Bantam", "targa": 313}
}
MongoDB e basi di dati NoSQL

Array

In BSON gli array sono oggetti di prima classe

{
    "nome": "Paolino",
    "cognome": "Paperino",
    "auto": {"modello": "American Bantam", "targa": 313},
    "familiari": ["qui", "quo", "qua"]
}
MongoDB e basi di dati NoSQL

Componenti di MongoDB

mongod
server (per default sulla porta 20017)
mongo
shell Javascript
API
per Python, Java, Scala, Ruby, C, C++, ... (http://api.mongodb.org/)

Istruzioni per l'installazione a http://docs.mongodb.org/manual/installation/

MongoDB e basi di dati NoSQL

Esecuzione

Per iniziare a capirci qualcosa può essere più semplice usare la shell online a http://www.mongodb.org

MongoDB e basi di dati NoSQL

Prime operazioni con MongoDB

MongoDB e basi di dati NoSQL

Prime operazioni con MongoDB

MongoDB e basi di dati NoSQL

Indici

MongoDB e basi di dati NoSQL

Popoliamo una collezione

> db.personaggi.insert({nome: "nonna papera", genere: 'F',
... "auto": {modello: "Detroit Electric"}, anno_nascita: 1833,
... prima_apparizione: 1943, passatempi: ['cucina', 'agricoltura']})
> db.personaggi.insert({nome: "Paperon", cognome: "De Paperoni",
... genere: 'M' anno_nascita: 1867, prima_apparizione: 1947,
... passatempi: ['alta finanza', 'risparmio',
... 'nuoto in depositi aurei']})
> db.personaggi.insert({nome: "Archimede", cognome: "Pitagorico",
... genere: 'M', prima_apparizione: 1952, passatempi: ['invenzioni',
... 'studio']})
> db.personaggi.insert({nome: "Pico", cognome: "De Paperis",
... genere: 'M', prima_apparizione: 1961, passatempi: ['studio']})
MongoDB e basi di dati NoSQL

Selettori semplici

MongoDB e basi di dati NoSQL

Selettori semplici

MongoDB e basi di dati NoSQL

Selettori complessi

MongoDB e basi di dati NoSQL

Selettori complessi

MongoDB e basi di dati NoSQL

Selettori complessi

MongoDB e basi di dati NoSQL

Proiezioni

è possibile visualizzare campi specifici dei documenti selezionati specificando un secondo argomento per find

MongoDB e basi di dati NoSQL

Proiezioni

MongoDB e basi di dati NoSQL

Indici

MongoDB e basi di dati NoSQL

Cursori

MongoDB e basi di dati NoSQL

Cursori

MongoDB e basi di dati NoSQL

Metodi sui cursori

limit
limita il numero di documenti
skip
sposta il punto in cui il cursore inizia a restituire risultati
sort
ordina i risultati
> db.personaggi.find().sort({prima_apparizione: 1})
count
conta il numero di documenti in un risultato
MongoDB e basi di dati NoSQL

Aggiornamento

MongoDB e basi di dati NoSQL

Aggiornamento

MongoDB e basi di dati NoSQL

Peculiarità di update

MongoDB e basi di dati NoSQL

Cancellazione

MongoDB e basi di dati NoSQL

Cancellazione

MongoDB e basi di dati NoSQL

MapReduce

MongoDB e basi di dati NoSQL

MapReduce

usiamo un algoritmo MapReduce in cui

MongoDB e basi di dati NoSQL

MapReduce

MongoDB e basi di dati NoSQL

MapReduce

MongoDB e basi di dati NoSQL

MapReduce

MongoDB e basi di dati NoSQL

MapReduce

MongoDB e basi di dati NoSQL

MapReduce

MongoDB e basi di dati NoSQL

Altre forme di aggregazione

MongoDB prevede forme più deboli di aggregazione che non richiedono l'utilizzo di algoritmi MapReduce, utilizzando il metodo aggregate in congiunzione con operatori come $match, $project, $group, $sort, ecc.

MongoDB e basi di dati NoSQL

Join

MongoDB e basi di dati NoSQL

Join

MongoDB e basi di dati NoSQL

Relazioni molti a molti

MongoDB e basi di dati NoSQL

Alternativa: denormalizzazione

MongoDB e basi di dati NoSQL

Come al solito...

...non c'è una soluzione universale, e molto spesso la scelta dipende oltre che dal problema che si vuole risolvere dal proprio stile di progettazione.