Il paradigma NoSQL (Not Only SQL) è nato come alternativa al più classico modello SQL (Structured Query Language). Le motivazioni alla base della nascita del modello NoSQL sono da ricercarsi nella necessità di avere maggiore flessibilità e prestazioni;
necessità che diventano man mano più pressanti quando si deve lavorare su basi di dati complesse di enormi dimensioni e con l’avvento dei big data in vari campi della ricerca analitica o per servizi web che lavorano su dati di milioni di utenti come i social network, sono stati un passo obbligato per venire incontro alle “4 V dei BigData” e offrire così scalabilità orizzontale in maniera distribuita sulla rete e al contempo prestazioni elevate e flessibilità nell’archiviazione. Tutto però ha un prezzo e come vedremo le maggiori prestazioni e la maggior flessibilità non vengono a costo zero.
Le 4 V dei Big Data e il NoSQL
I Big Data rappresentano una quantità enorme di dati variegati. Le caratteristiche dei Big Data possono essere racchiuse in 4 attributi:
- Volume: indica la dimensione dell’insieme di dati e si riferisce alla capacità di memorizzare e accedere a grandi quantità di dati che possono arrivare anche fino a miliardi di Terabyte;
- Varietà: i dati che costituiscono questo gigantesco insieme di informazioni provengono da fonti eterogenee e appartengono a tipologie differenti. Possiamo avere dati testuali, immagini, suoni, video e file di qualsiasi tipo. Non ci troviamo di fronte a dati strutturati e omogenei;
- Velocità: le analisi sui dati devono avvenire a enorme velocità per poter essere utilizzati nei vari campi applicativi, dato che si evolvono continuamente;
- Veridicità: poiché le analisi sui Big Data hanno larghissimo impiego nel supporto decisionale, bisogna essere sicuri siano affidabili o altrimenti possono portare a considerazioni errate con effetti nefasti.
Gli RMDB a causa della bassa flessibilità e poca scalabilità non sono adeguati a supportare le prime tre “V” dei Big Data (volume, varietà e velocità). I NoSQL invece possono fare leva sulle seguenti caratteristiche che ben si sposano con le caratteristiche dei Big Data:
- Cloud friendliness: Devono essere adatti a operare in un ambiente multi‐nodo distribuito in modo robusto, consentendo il funzionamento in caso aggiunta e rimozione dei nodi, supportando lo sharding dei dati, ossia la distribuzione delle informazioni su vari nodi, e la replicazione dei dati su più nodi.
- Bassa complessità: Gli RMDB necessitano di infrastrutture complesse per il mantenimento dei dati e l’allineamento degli stessi. Siccome le prestazioni sono fondamentali, è necessario adottare strutture più semplici da gestire.
- Flessibilità: Devono essere in grado di gestire informazioni di natura diversa e mutabile che non rispetta degli schemi rigidi e prefissati.
- Scalabilità Orizzontale: L’aggiunta di macchine e la rimozione delle stesse dal cluster, deve avvenire senza troppa difficoltà e soprattutto senza che il sistema debba essere arrestato o subire rallentamenti.
Tipologie di modello dati
I database NoSQL si suddividono in 5 categorie principali a seconda del modello di gestione dati utilizzato:
- Chiave valore
- Colonnari
- Orientati al documento
- A grafo
- Ibridi, ossia che possono utilizzare sistemi criteri misti tra le tipologie elencate pocanzi
Le caratteristiche possono variare anche in modo significativo a seconda dell’implementazione, ma si può definire comunque qual è in linea di massima il rapporto tra le varie caratteristiche in relazione alla tipologia di database. Tipologie di database con strutture più semplici, garantiscono tendenzialmente prestazioni molto più elevate a prezzo di maggiori limitazioni sulla possibilità di effettuare interrogazioni più complesse.
Tipo | Performance | Scalabilità | Flessibilità | Complessità Strutturale | Funzionalità Interrogazioni |
Chiave-Valore | Molto Elevate | Molto Elevata | Elevata | Molto bassa | Minimali |
Colonnare | Molto Elevate | Molto Elevata | Moderata | Bassa | Minimali |
A documenti | Elevate | Elevata | Elevata | Bassa | Medio basse |
A grafo | Moderate | Moderata | Elevata | Elevata | Elevate |
RMDB | Basse | Bassa | Bassa | Moderata | Elevate |
Schema e correlazione dati:
Tipo | Schema | Correlazione Dati | Note |
Chiave-Valore | NO | NO | Query molto performanti su grandi moli di dati. Altissima concorrenza |
Colonnare | SI | SI | Query molto performanti su grandi moli di dati. Singola riga famiglia di colonne non separabile |
A documenti | NO | NO | Query performanti su grandi moli di dati. Ottima versatilità. |
A grafo | NO | SI | Dati fortemente relazionati |
Soddisfare contemporaneamente tutti e tre i vincoli del teorema di Brewer (Consistency, Availability e Partition tolerance) non è possibile se non in modo “approssimato” e le varie soluzioni NoSQL attualmente in circolazione focalizzano l’attenzione su differenti vincoli. Per dare una panoramica generale ho realizzato una tabella dei principali database NoSQL in circolazione, dove si evidenzia il tipo i vincoli CAP e il linguaggio implementativo utilizzato (se noto).
Nome | Tipo | Linguaggio | CAP |
Aerospike | Chiave-Valore | C | AP |
Berkeley DB | Chiave-Valore | C | CP |
BigTable | Colonnare | C++ | CP |
Cassandra | Colonnare | Java | AP |
Couchbase | A documenti | C++ \ Erlang | AP |
CouchDB | A documenti | Erlang | AP |
DynamoDB | Chiave-Valore | nc | AP |
Hbase | Colonnare | Java | CP |
Hypertable | Colonnare | C++ | CP |
KAI | Chiave-Valore | Erlang | AP |
MongoDB | A documenti | C++ \ Javascript | CP |
Neo4J | A grafo | Java | CA |
Oracle NoSQL | Chiave-Valore | Java | CP o AP |
OrientDB | A grafo | Java | CA |
Redis | Chiave-Valore | C | CP |
Riak | Chiave-Valore | Erlang | AP |
Scalaris | Chiave-Valore | Erlang | CP |
SimpleDB | A documenti | Erlang | AP |
Terrastore | A documenti | Java | CP |
Tokyo Cabinet | Chiave-Valore | C++ | AP |
Vertica | Colonnare | nc | CP |
Voldemort | Chiave-Valore | Java | AP |
Nella sezione pubblicazioni potrete scaricare il mio paper completo sulle varie tipologie di NoSQL.