Per molti decenni i database re­la­zio­na­li sono stati la prin­ci­pa­le soluzione per gestire grandi quantità di dati. Ma la varietà di dati che ca­rat­te­riz­za le ap­pli­ca­zio­ni web moderne hanno tra­sfor­ma­to i database orientati ai documenti, come MongoDB, in validi con­cor­ren­ti al modello tra­di­zio­na­le. Ti spie­ghia­mo come funziona questo nuovo approccio e quali vantaggi offre.

Quali sono le ca­rat­te­ri­sti­che di MongoDB?

MongoDB, nome derivato dall’inglese “humongous” (in italiano: gi­gan­te­sco, enorme) è un database orientato ai documenti. A dif­fe­ren­za delle banche dati re­la­zio­na­li in cui i dati vengono salvati in una tabella strut­tu­ra­ta, nei database MongoDB i dati vengono salvati in co­sid­det­te raccolte non strut­tu­ra­te (col­lec­tions).

Inoltre, MongoDB non usa SQL per eseguire le query e viene quindi definito come banca dati NoSQL. Al suo posto MongoDB usa il lin­guag­gio 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 Ja­va­Script siano sup­por­ta­ti per cui questo tipo di database è la scelta ottimale per numerose piat­ta­for­me che usano Ja­va­Script.

Un’altra ca­rat­te­ri­sti­ca dei database MongoDB è la loro sca­la­bi­li­tà oriz­zon­ta­le. Questo significa che i dati possono essere di­stri­bui­ti su più server invece di essere salvati in un punto centrale. In tal modo è possibile mi­glio­ra­re la di­spo­ni­bi­li­tà dei dati e tutta la per­for­man­ce del database. Questo tipo di sca­la­bi­li­tà è nor­mal­men­te più con­ve­nien­te rispetto a dotare un singolo server di hardware potente (sca­la­bi­li­tà verticale).

Come funziona MongoDB?

A dif­fe­ren­za di MySQL, MongoDB è orientato ai documenti e pertanto segue un approccio com­ple­ta­men­te diverso per quanto riguarda il sal­va­tag­gio 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 strut­tu­ra­to. Ogni documento può avere un numero qualsiasi di campi, che non devono ne­ces­sa­ria­men­te cor­ri­spon­de­re tra loro. In pratica, i documenti so­sti­tui­sco­no le righe di una tabella SQL e i campi e le colonne definite in tali documenti.

Ci sono numerosi strumenti che con­sen­to­no di lavorare ai database MongoDB. Oltre alla dif­fu­sis­si­ma MongoDB Shell, esiste anche MongoDB Compass, uno strumento grafico per gestite i database MongoDB. In questo articolo ci con­cen­tre­re­mo sui comandi shell.

Poiché MQL si basa su Ja­va­Script, esistono tan­tis­si­me funzioni pre­de­fi­ni­te per eseguire richieste e comandi. In sostanza, però, tutti i comandi di scrittura e lettura sono strut­tu­ra­ti 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 am­pia­men­te descritti e spiegati nella do­cu­men­ta­zio­ne 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 ri­spet­ti­va ope­ra­zio­ne. A questo segue il metodo che deve essere usato.

Il metodo find() può essere uti­liz­za­to per cercare solo de­ter­mi­na­ti documenti. Se si lascia il campo dei parametri vuoto, vengono re­sti­tui­ti tutti i documenti di quella raccolta. Nell’esempio qui sopra, tuttavia, la ricerca viene ef­fet­tua­ta in tutti i documenti in cui il campo “nome” ha il valore “Franco”. Il metodo updateOne() può essere uti­liz­za­to per so­vra­scri­ve­re valori in un documento e passare due argomenti. Il primo è il co­sid­det­to “criterio di selezione”, il secondo è la coppia chiave/valore da so­vra­scri­ve­re. 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 ag­giun­ge­re. Quando si ag­giun­go­no i documenti è ne­ces­sa­rio as­si­cu­rar­si che ciascun documento in una raccolta MongoDB abbia 12 byte sotto forma di numero esa­de­ci­ma­le come ID oggetto. Se il parametro non viene spe­ci­fi­ca­to nel momento in cui viene inserito il documento, MongoDB genera au­to­ma­ti­ca­men­te un ID.

I vantaggi di MongoDB

La struttura di MongoDB presenta alcuni vantaggi per gli utenti, so­prat­tut­to in ambito di fles­si­bi­li­tà e sca­la­bi­li­tà. Da un lato, il sal­va­tag­gio dei dati basato sui documenti offre il vantaggio che non tutti i record devono avere lo stesso attributo, come nei database re­la­zio­na­li. Questo consente allo stesso tempo di salvare dati in formato non strut­tu­ra­to e se­mi­strut­tu­ra­to. Inoltre, è possibile ri­strut­tu­ra­re singoli documenti (ad esempio ag­giun­gen­do o eli­mi­nan­do un attributo/campo) senza dover mo­di­fi­ca­re 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 com­pa­ti­bi­li­tà elevato con numerose delle comuni piat­ta­for­me Ja­va­Script.

Oltre al sal­va­tag­gio dei dati in formato non strut­tu­ra­to, MongoDB offre anche un grado elevato di sca­la­bi­li­tà oriz­zon­ta­le, senza violare i principi del metodo ACID (Atomicity, Con­si­sten­cy, Isolation, Du­ra­bi­li­ty). Se i database sono di­stri­bui­ti, spesso è difficile garantire la coerenza perché non tutti i dati sono me­mo­riz­za­ti sullo stesso server. Quando vengono eseguite modifiche con­tem­po­ra­nea­men­te su più documenti, tali modifiche non possono essere salvate im­me­dia­ta­men­te da tutti i server coinvolti. Se il volume di richieste è elevato, a volte questo può portare a dati in­coe­ren­ti. Tuttavia, dal rilascio di MongoDB 4.2 nel 2019, è possibile eseguire le modifiche con­tem­po­ra­nea­men­te su più documenti di­stri­bui­ti su diversi server, senza com­pro­met­ter­ne la coerenza o la di­spo­ni­bi­li­tà.

Consiglio

Stai cercando un database orientato ai documenti in grado di crescere assieme alle necessità della tua ap­pli­ca­zio­ne web? Allora MongoDB è la soluzione che fa al caso tuo!

Per quali usi è indicato MongoDB?

MongoDB è la scelta perfetta per rea­liz­za­re progetti web basati su enormi quantità di dati non strut­tu­ra­ti. 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 sca­la­bi­li­tà oriz­zon­ta­le quasi il­li­mi­ta­ta, poiché i database possono essere di­stri­bui­ti senza problemi su più server senza com­pro­met­te­re la fun­zio­na­li­tà del progetto. Per garantire la sicurezza e la di­spo­ni­bi­li­tà dei dati a lungo termine, MongoDB consente anche di creare fa­cil­men­te copie e di renderle di­spo­ni­bi­li su server diversi. Il database basato sui documenti mostra i suoi punti di forza anche quando si tratta di rias­su­me­re volumi di dati pro­ve­nien­ti da una o più fonti.

L’uso di MongoDB è con­si­glia­to per tutti i progetti web con le seguenti ca­rat­te­ri­sti­che:

  • Sca­la­bi­li­tà: se il tuo progetto web cresce, di solito aumenta il numero di richieste e di con­se­guen­za le esigenze del database.
  • Di­spo­ni­bi­li­tà: la tua ap­pli­ca­zio­ne web deve essere sempre di­spo­ni­bi­le, anche in caso di guasto del server.
  • Fles­si­bi­li­tà: il tuo progetto è dinamico ed è soggetto a cam­bia­men­ti 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à.

Consiglio

Hai deciso di usare MongoDB e vuoi con­fi­gu­ra­re la tua banca dati? Il nostro articolo su come in­stal­la­re MongoDB ti aiuta a muovere i primi passi con facilità.

Vai al menu prin­ci­pa­le