MongoDB, il database NoSQL flessibile e scalabile

Per decenni i database relazionali sono stati la soluzione più usata per la gestione dei dati digitali. Anche oggi il database MySQL, rilasciato nel 1995, è usato per moltissimi siti. Il volume crescente e la varietà dei dati che contraddistinguono le applicazioni web moderne hanno però portato all’affermazione dei database non relazionali in diretta concorrenza a quelli relazionali. Questi sistemi di memorizzazione come MongoDB, rilasciato nel 2009, si basano su documenti e vengono anche indicati come database NoSQL, visto che non usano SQL (Structured Query Language), il linguaggio classico dei database relazionali. Ciò comporta dei requisiti maggiori per il livello di applicazione, ma consente di distribuire le serie di dati e i processi di lavoro tra più server, rendendo questi database moderni quasi scalabili in maniera illimitata.

Cos’è MongoDB?

Nel 2007 l’azienda 10gen ha iniziato a sviluppare MongoDB (la parola deriva dall’inglese humongous, “gigante, enorme”), un database open source orientato ai documenti, che è stato rilasciato per la prima volta due anni dopo, diventando in fretta uno dei database NoSQL più amati. Ancora oggi la 10gen, conosciuta ora con il nome di MongoDB Inc., è responsabile per l’ulteriore sviluppo del software e la vendita delle soluzioni aziendali.

MongoDB è scritto nel linguaggio di programmazione C++ e salva i dati nel formato BSON (Binary JSON), basato su JSON (JavaScript Object Notation). Grazie a questo sono supportati tutti i tipi di dati JavaScript, che rendono MongoDB un’ottima scelta per le piattaforme Node.js. I database MongoDB comprendono una o più collezioni di dati che gestiscono diversi documenti costituiti da campi eterogenei e privi di uno specifico schema.

La connessione a questo database si instaura in diversi modi: nella maggior parte delle distribuzioni è presente di base una Mongo shell, cioè un client, che permette l’accesso tramite riga di comando, ma è anche possibile attivare un’interfaccia amministrativa, basata sul protocollo HTTP, dal browser. Ci sono diverse interfacce utente che consentono la rappresentazione grafica dei dati, nonché la loro elaborazione, come MongoChef, Robomongo o Mongoclient. MongoDB funziona su tutti i sistemi Linux, Windows e Mac più comuni.

Un confronto tra MongoDB e MySQL

MongoDB è orientato ai documenti e segue quindi un metodo di memorizzazione dei dati completamente diverso da MySQL, pur mantenendo una struttura di base simile:

  • I dati vengono memorizzati in collezioni (collections) invece che in tabelle;
     
  • I documenti nel formato BSON sostituiscono le righe, mentre i campi predefiniti le colonne delle tabelle SQL;
     
  • Un campo è sempre composto da una coppia chiave-valore, dove la chiave rappresenta il nome del campo, mentre il valore è un numero, una parola, un testo o anche una lista completa di parole e/o numeri, se non perfino un intero file;
     
  • Un documento di MongoDB è quindi una collezione di coppie chiave-valore, in maniera analoga alle righe delle tabelle MySQL.

La vera differenza è che i documenti non hanno uno schema fisso, al contrario di tutte le righe di un database MySQL che si basano sulla stessa struttura, cioè possiedono lo stesso numero di valori associato agli stessi tipi di dati. Invece i singoli documenti di MongoDB hanno una propria struttura, diversa dagli altri, cosa che permette di creare in ogni momento nuovi campi con un valore qualsiasi, a differenza di un database relazionale come MySQL che richiede una destrutturazione completa. Anche se una chiave all’interno di un documento deve essere unica, ciò non toglie che possa ricomparire in altri documenti. Affinché questo avvenga anche nei database MySQL, bisogna stabilire le relazioni (joins) tra le diverse tabelle, che in MongoDB possono essere create opzionalmente sotto forma di documenti incorporati o referenze.

Un’altra differenza elementare tra i due sistemi è la diversa procedura per l’interrogazione dei dati. Essendo MongoDB un database NoSQL, non utilizza ovviamente il linguaggio SQL, ma supporta l’elaborazione dei dati in una propria lingua; in questo modo MongoDB e il relativo client comunicano tra loro. Il database utilizza per questo dei metodi specifici del linguaggio di programmazione usato dal client, che ricorre a librerie o a driver, scaricabili separatamente sul sito ufficiale.

Inoltre, in caso di richieste complesse, si può usare il metodo di aggregazione MapReduce, tipico per i database orientati ai documenti.

Possibili applicazioni di MongoDB

Se volete realizzare siti che si basano su una grande quantità di dati eterogenea, MongoDB è sempre un’ottima scelta. Il metodo usato (orientato ai documenti), senza rimanere legati ad uno schema, è applicabile a molti tipi di dati, che devono essere elaborati velocemente e salvati. Inoltre questo sistema consente una scalabilità orizzontale, quasi illimitata, in modo da distribuire facilmente i database su più server senza danneggiarne però la funzionalità. Per garantire la sicurezza e la disponibilità dei dati nel lungo periodo, con MongoDB si possono creare delle copie delle banche dati e metterle a disposizione su diversi server. Anche nella sintesi di grandi quantità di dati da una o più fonti emergono i punti di forza di questo tipo di database.

Si consiglia di utilizzare MongoDB per i siti che si contraddistinguono per le seguenti caratteristiche:

  • Scalabilità: se il traffico sul sito aumenta, anche le richieste al database saranno maggiori;

  • Disponibilità: potete stare sicuri che la vostra applicazione web è sempre disponibile, anche nel caso in cui il server non sia raggiungibile;

  • Flessibilità: il progetto può adeguarsi dinamicamente in qualsiasi momento.

Con la distribuzione dei dati su più server si rileva anche una differenza determinante tra MongoDB e i database relazionali: una volta salvati i dati in un database MongoDB, per un breve lasso di tempo vengono assegnati alle vecchie banche dati solo permessi di lettura. Questo processo prende il nome di “eventual consistency” (in italiano “consistenza finale”)ed è utilizzato anche dal fork di MySQL MariaDB, con il vantaggio che i database, divisi dalle partizioni di rete da cluster di database più grandi, possono autorizzare come prima i permessi di scrittura delle applicazioni.

Se non sapete quale tipo di database si adatta meglio al vostro progetto, non dovete per forza scegliere: la soluzione migliore per voi potrebbe essere una combinazione di diversi tipi.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.