Cos’è MongoDB?
Per molti decenni i database relazionali sono stati la principale soluzione per gestire grandi quantità di dati. Ma la varietà di dati che caratterizza le applicazioni web moderne hanno trasformato i database orientati ai documenti, come MongoDB, in validi concorrenti al modello tradizionale. Ti spieghiamo come funziona questo nuovo approccio e quali vantaggi offre.
Quali sono le caratteristiche di MongoDB?
MongoDB, nome derivato dall’inglese “humongous” (in italiano: gigantesco, enorme) è un database orientato ai documenti. A differenza delle banche dati relazionali in cui i dati vengono salvati in una tabella strutturata, nei database MongoDB i dati vengono salvati in cosiddette raccolte non strutturate (collections).
Inoltre, MongoDB non usa SQL per eseguire le query e viene quindi definito come banca dati NoSQL. Al suo posto MongoDB usa il linguaggio di query MongoDB Query Language (MQL). Pertanto, i database MongoDB vengono salvati in formato BSON, creato a partire dal formato JSON. Questo fa in modo che tutti i tipi di file JavaScript siano supportati per cui questo tipo di database è la scelta ottimale per numerose piattaforme che usano JavaScript.
Un’altra caratteristica dei database MongoDB è la loro scalabilità orizzontale. Questo significa che i dati possono essere distribuiti su più server invece di essere salvati in un punto centrale. In tal modo è possibile migliorare la disponibilità dei dati e tutta la performance del database. Questo tipo di scalabilità è normalmente più conveniente rispetto a dotare un singolo server di hardware potente (scalabilità verticale).
Come funziona MongoDB?
A differenza di MySQL, MongoDB è orientato ai documenti e pertanto segue un approccio completamente diverso per quanto riguarda il salvataggio dei dati. Invece di salvare i dati in tabelle in cui ogni riga ha lo stesso numero di campi che devono essere compilati con valori, essi vengono salvati in documenti BSON in formato non strutturato. Ogni documento può avere un numero qualsiasi di campi, che non devono necessariamente corrispondere tra loro. In pratica, i documenti sostituiscono le righe di una tabella SQL e i campi e le colonne definite in tali documenti.
Ci sono numerosi strumenti che consentono di lavorare ai database MongoDB. Oltre alla diffusissima MongoDB Shell, esiste anche MongoDB Compass, uno strumento grafico per gestite i database MongoDB. In questo articolo ci concentreremo sui comandi shell.
Poiché MQL si basa su JavaScript, esistono tantissime funzioni predefinite per eseguire richieste e comandi. In sostanza, però, tutti i comandi di scrittura e lettura sono strutturati allo stesso modo, come si può evincere dall’esempio di seguito. Oltre a quelli elencati, esistono numerosi altri comandi con cui è possibile gestire il database MongoDB. Questi sono ampiamente descritti e spiegati nella documentazione di MongoDB.
db.studenti.find({ nome: "Franco" })
db.studenti.updateOne({ nome: "Franco" }, { $set: { semestre: 2 } })
db.studenti.deleteOne ({ nome: "Paolo" })
db.studenti.insertOne({
Nome: "Elsa",
Età: 18,
semestre: 1
})
Nell’esempio qui sopra è possibile notare che vengono inviati più comandi al database MongoDB, e ognuno di essi presenta la stessa struttura. “db” sta per l’intero database e “studenti” per la raccolta in cui deve essere eseguita la rispettiva operazione. A questo segue il metodo che deve essere usato.
Il metodo find() può essere utilizzato per cercare solo determinati documenti. Se si lascia il campo dei parametri vuoto, vengono restituiti tutti i documenti di quella raccolta. Nell’esempio qui sopra, tuttavia, la ricerca viene effettuata in tutti i documenti in cui il campo “nome” ha il valore “Franco”. Il metodo updateOne() può essere utilizzato per sovrascrivere valori in un documento e passare due argomenti. Il primo è il cosiddetto “criterio di selezione”, il secondo è la coppia chiave/valore da sovrascrivere. In questo caso, per tutti gli studenti di nome “Franco” il campo “semestre” viene compilato con un 2.
Il metodo deleteOne() prende un solo argomento, ovvero il criterio di selezione in base al quale devono essere eliminati alcuni documenti. Nell’esempio, tutti gli studenti di nome “Paolo” vengono rimossi dal database. Anche il metodo insertOne() riceve un argomento e tutto il contenuto JSON del documento da aggiungere. Quando si aggiungono i documenti è necessario assicurarsi che ciascun documento in una raccolta MongoDB abbia 12 byte sotto forma di numero esadecimale come ID oggetto. Se il parametro non viene specificato nel momento in cui viene inserito il documento, MongoDB genera automaticamente un ID.
I vantaggi di MongoDB
La struttura di MongoDB presenta alcuni vantaggi per gli utenti, soprattutto in ambito di flessibilità e scalabilità. Da un lato, il salvataggio dei dati basato sui documenti offre il vantaggio che non tutti i record devono avere lo stesso attributo, come nei database relazionali. Questo consente allo stesso tempo di salvare dati in formato non strutturato e semistrutturato. Inoltre, è possibile ristrutturare singoli documenti (ad esempio aggiungendo o eliminando un attributo/campo) senza dover modificare anche altri documenti della stessa cartella. Poiché i documenti vengono salvati in formato BSON, si ha un ulteriore vantaggio: i database MongoDB offrono un grado di compatibilità elevato con numerose delle comuni piattaforme JavaScript.
Oltre al salvataggio dei dati in formato non strutturato, MongoDB offre anche un grado elevato di scalabilità orizzontale, senza violare i principi del metodo ACID (Atomicity, Consistency, Isolation, Durability). Se i database sono distribuiti, spesso è difficile garantire la coerenza perché non tutti i dati sono memorizzati sullo stesso server. Quando vengono eseguite modifiche contemporaneamente su più documenti, tali modifiche non possono essere salvate immediatamente da tutti i server coinvolti. Se il volume di richieste è elevato, a volte questo può portare a dati incoerenti. Tuttavia, dal rilascio di MongoDB 4.2 nel 2019, è possibile eseguire le modifiche contemporaneamente su più documenti distribuiti su diversi server, senza comprometterne la coerenza o la disponibilità.
Stai cercando un database orientato ai documenti in grado di crescere assieme alle necessità della tua applicazione web? Allora MongoDB è la soluzione che fa al caso tuo!
Per quali usi è indicato MongoDB?
MongoDB è la scelta perfetta per realizzare progetti web basati su enormi quantità di dati non strutturati. Il lavoro orientato ai documenti senza essere per forza legato a uno schema è ideale per numerosi tipi di file che devono essere salvati ed elaborati.
Inoltre, questo sistema consente una scalabilità orizzontale quasi illimitata, poiché i database possono essere distribuiti senza problemi su più server senza compromettere la funzionalità del progetto. Per garantire la sicurezza e la disponibilità dei dati a lungo termine, MongoDB consente anche di creare facilmente copie e di renderle disponibili su server diversi. Il database basato sui documenti mostra i suoi punti di forza anche quando si tratta di riassumere volumi di dati provenienti da una o più fonti.
L’uso di MongoDB è consigliato per tutti i progetti web con le seguenti caratteristiche:
- Scalabilità: se il tuo progetto web cresce, di solito aumenta il numero di richieste e di conseguenza le esigenze del database.
- Disponibilità: la tua applicazione web deve essere sempre disponibile, anche in caso di guasto del server.
- Flessibilità: il tuo progetto è dinamico ed è soggetto a cambiamenti in qualsiasi momento.
Non sai quale tipo di database potrebbe essere più adatto al tuo sito web? Non devi per forza decidere fra uno o l’altro: è possibile combinare diversi modelli di banche dati. Questa soluzione potrebbe essere l’ideale per le tue necessità.
Hai deciso di usare MongoDB e vuoi configurare la tua banca dati? Il nostro articolo su come installare MongoDB ti aiuta a muovere i primi passi con facilità.