Oggi ci concediamo un articolo più tecnico del solito, dedicato a tutti i nostri lettori (e clienti) che hanno a che fare tutti i giorni con database, codice e sviluppo di software in generale. Con l’ingresso dei servizi di cloud computing non potevamo astenerci dal considerare i database non relazionali, anche detti NoSQL. Ad oggi esistono decine di sistemi non relazionali, dal famoso MongoDB a Redis, Cassandra e decine di altri che vengono utilizzati in tutto il mondo, in sistemi spesso molto complessi che utilizziamo nella vita di tutti i giorni. Oggi cerchiamo di farvi capire cosa è e come funziona un database NOSQL.
Cosa è un database NoSQL
La dicitura NoSQL indica primariamente che questo tipo di database non sono basati su SQL, il noto linguaggio di interrogazione dei dati che si basa su uno schema relazionale. Prendendo ad esempio MySQL, tutti sappiamo che un database è composto da colonne e tuple, ha determinate caratteristiche come poter avere una chiave primaria o secondaria e i dati si inseriscono e si estraggono per mezzo del noto linguaggio SQL, tramite queries. I database relazionali sono infatti ottimi quando esistono delle relazioni tra i dati che salviamo (basti pensare ad una JOIN in SQL), ma sono poco performanti nel caso sia necessario salvare una grande quantità di dati, magari usando la scalabilità orizzontale, e quindi utilizzando più server dove salvare questi dati e non solamente incrementando la potenza di un singolo server (scalabilità verticale).
Esistono diverse tipologie di database NoSQL, la più semplice è sicuramente quella di tipo Key-Value, che rappresenta la forma più “primitiva” di questo tipo di database, mentre la Document Store è sicuramente la più evoluta e ad oggi anche quella più utilizzata nel web. All’interno di un database di tipo document-store i dati vengono suddivisi in collections, che a loro volta possono contenere all’interno tanti documents. Un document di fatto non ha un numero di campi fissi, può variare nel numero di campi e nella loro lunghezza. Tutte queste caratteristiche contribuiscono di fatto a rendere i database non relazionali degli strumenti ottimali per memorizzare milioni di dati, spesso generati da sensori, da applicazioni online o semplicemente frutto di enormi data set che vanno processati in un secondo momento.
Per capire al meglio quale sia la differenza tra una struttura relazionale e una non relazionale, ecco un’immagine di esempio che chiarisce meglio il concetto anche a livello grafico:
Come detto esistono diverse tipologie di database no-sql e così anche diversi software (DBMS) che possono essere utilizzati. Tra i più famosi ci sono sicuramente MongoDB, Redis, Cassandra e CouchDB.
Quando utilizzare un database non relazionale
I database non relazionali non sono la soluzione definitiva al problema del salvataggio e recupero dei dati, sono molto utili in determinati contesti. Ad oggi aziende come Twitter e Facebook utilizzano queste tecnologie per salvare il numero elevato di dati che devono gestire ogni giorno, parliamo di terabyte di dati che traggono vantaggio dal fatto che i database NoSQL possano scalare velocemente, in modo orizzontale, principalmente grazie all’aggiunta di nuovi server.
I database relazionali sono molto utili nel momento in cui ci accorgiamo che la nostra base dati non ha senso in formato relazionale, ad esempio nel caso in cui dobbiamo utilizzare più JOIN continue per accedere ai dati. Al contempo un database di questa tipologia è necessario quando vogliamo assicurare ai nostri utenti un alto livello di availability del servizio: difficilmente, anche a parità di costi, è possibile raggiungere la stessa scalabilità e lo stesso livello di servizio con un database come MySQL, pertanto nel caso di una applicazione web che deve scalare velocemente e essere pronta a raccogliere anche migliaia di dati al secondo, la scelta di un software come MongoDB è quasi del tutto scontata.
HighScalability, uno dei blog più famosi riguardante il mondo della scalabilità, ha un ottimo articolo che elenca tutti i casi specifici in cui la scelta di un database NOSQL è da preferire rispetto ad altre soluzioni, indicando tra l’altro anche quale sia il software migliore in questi casi.