
Negli ultimi anni i database non relazionali sono diventati molto popolari in termini di memorizzazione di enormi quantità di dati e scalabilità degli stessi.
Sono più flessibili e prevedono alta velocità di esecuzione anche nell’elaborazione di terabyte e terabyte di dati, tanto che vengono utilizzati già da qualche anno dai principali social network come Facebook, Twitter e LinkedIn per gestire l’immensa mole di dati degli utenti prodotta quotidianamente.
C’è chi pensa addirittura che i database non relazionali sostituiranno in futuro quelli relazionali.
Questo perché questi ultimi hanno più difficoltà nella gestione di dati social e altri dati non strutturati sempre più diffusi. Perciò, ci si pone alcuni interrogativi:
- Riusciranno i database relazionali a gestire i big data?
- Saranno adatti per l’analisi dei dati dell’età moderna?
Prima di formulare una risposta, vediamo quali sono le principali caratteristiche di entrambi i database.
Database relazionale
Innanzitutto, per database si intende
”un archivio di dati strutturato in modo da razionalizzare la gestione e l’aggiornamento delle informazioni e da permettere lo svolgimento di ricerche complesse.”
In parole semplici un database è un raccoglitore di informazioni, di cui è più o meno facile ricavarne il contenuto.
Una tipologia molto comune di database è quello relazionale, che viene utilizzato per gestire una grande quantità di informazioni grazie alla scalabilità e alla flessibilità integrate.
I database relazionali sono diffusissimi e possono essere utilizzati per gestire semplici attività come la memorizzazione di informazioni su artisti, album e canzoni per un rivenditore di musica, a attività più complesse come le registrazioni di titoli azionari e obbligazionari e altre transazioni per gestire la propria clientela.
La caratteristica principale di questi tipi di database è che tutti i dati vengono memorizzati in una tabella (si dice che il database è rigorosamente strutturato) che è composta da:
- Righe: ossia dati che costituiscono un singolo elemento. Ad esempio, i dati relativi a un singolo acquisto (ad es. numero d’ordine, prodotto acquistato, cliente, ecc.) di un consumatore. Una riga può anche essere chiamata record, entità o tupla. Ogni riga viene identificata da una chiave primaria, che indica l’unicità del record e facilita le relazioni tra più righe.
- Colonne: sono le etichette di intestazione per elementi di righe. Una colonna dà contesto alle informazioni contenute nelle righe (colonna ordine, colonna prodotto, colonna cliente, ecc.), ed è anche nota come attributo o campo.
Solitamente i database relazionali vengono gestiti da software chiamati RDBMS (Relational Database Management System) che consentono di collegare i dati su più database (quindi tra più tabelle), permettendo di eseguire calcoli più complessi e di identificare le connessioni tra i dati.
Questo è il motivo per cui quando senti parlare di database relazionale lo puoi vedere associato alla sigla RDBMS.
Una seconda caratteristica importante è che i database relazionali possono comunicare tra loro.
Per farlo si avvalgono di un’interfaccia conosciuta come SQL (Structured Query Language), che si basa su SEQUEL (Structured English Query Language), un linguaggio creato in IBM da Donald D. Chamberlin e Raymond F. Boyce.
Semplicemente SQL viene usato per aggiungere, aggiornare o eliminare righe di dati, nonché per gestire tutti gli aspetti del database.
Questo tipo di operazioni sono eseguite tramite transazioni, ognuna di esse costituita da una o più istruzioni SQL che vengono eseguite come sequenza di operazioni di database per formare una singola unità logica di lavoro.
Complessivamente il linguaggio SQL è un linguaggio facile da imparare, in quanto le query sono semplici comandi in inglese, e perciò è di facile accesso a tutti.
Nel tempo si sono formate diverse versioni di SQL, le cui differenze sono principalmente nella sintassi piuttosto che nella funzione. Ecco alcune versioni comuni:
Una terza caratteristica importante dei database relazionali è il supporto delle proprietà ACID: Automicity (Atomicità), Consistency (Coerenza), Isolation (Isolamento) e Durability (Durabilità). Essa assicura che tutte le transazioni siano elaborate in modo affidabile. In particolare:
- L’automaticità indica che ogni transazione è unica e si assicura che se una parte logica di una transazione fallisce, tutto viene ripristinato in modo che i dati non vengano modificati.
- La coerenza afferma che tutti i dati scritti nel database sono soggetti alle regole definite.
- L’isolamento attesta che le modifiche apportate in una transazione non sono visibili ad altre transazioni finché non vengono confermate.
- La durata garantisce che le modifiche apportate a una transazione vengono memorizzate e rese disponibili nel database anche in caso di interruzione dell’alimentazione o quando il database si disconnette improvvisamente.
Vediamo ora le caratteristiche principali del secondo tipo di database, quello non relazionale.
Database non relazionale
Un database relazione non è sempre la migliore soluzione per organizzare al meglio i dati.
Possono capitare infatti situazioni in cui i dati non si riescono a legare tra loro tramite una tabella, come ad esempio video, foto e altri dati presenti sui social network.
Per questo motivo si sono sempre più diffusi i database non relazionali, (definiti anche NoSQL ossia “Non solo database SQL”), al fine di poter gestire la rapida crescita di dati non strutturati e ridimensionarli facilmente.
Una prima caratteristica chiave per questo tipo di database è che i dati sono conservati in documenti e non in tabelle.
In questo modo, ogni documento aggregato raccoglie tutti i dati associati a un’entità, in modo che qualsiasi applicazione possa trattare l’entità come oggetto e valutare in un sol colpo tutte le informazioni a essa correlate.
Di conseguenza, si evitano anche i fardelli computazionali dovuti ai passaggi di aggregazione delle informazioni tipici del linguaggio SQL, in quanto tutti i dati necessari e corrispondenti a un medesimo oggetto sono già disponibili in un unico documento.
I database iniziali creati sulla base di questi concetti sono BigTable di Google, HBase di Yahoo, Cassandra di Facebook, e così via.
Una seconda caratteristica è che questi database hanno la peculiarità di consentire rapidi dati in entrata, cioè si dice che sono scalabili orizzontalmente.
Ciò significa che riescono facilmente ad aggiungere più computer (definiti nodi) alla rete per poter gestire al meglio l’aumento dei dati.
In tal modo, i dati vengono divisi automaticamente ed elaborati attraverso i nodi in un cluster (insieme di computer collegati tra loro).
Si dice anche che rappresentano un ambiente di dati distribuiti, giusto per fare un esempio pensa ad Hadoop Distributed File System (HDFS).
I database relazionali invece supportano la scalabilità definita verticale.
Per gestire al meglio l’aumento di dati si aumenta la potenza del sistema aggiungendo ulteriori spazi CPU, memoria e disco.
In questa tecnica di ridimensionamento c’è sempre un singolo server di produzione che può essere collegato da tutte le applicazioni e dagli utenti.
Infine, altra caratteristica dei database non relazionali è che possono essere classificati in quattro categorie principali:
- Database valori-chiave: questa è la forma più semplice di database NoSQL in cui ogni valore è associato a chiave univoca (ad esempio Redis);
- Database di colonne: questo database è in grado di memorizzare ed elaborare grandi quantità di dati utilizzando un puntatore che punta a molte colonne distribuite su un cluster (ad esempio Apache HBase);
- Database del documento: questo database può contenere molti documenti con valori-chiave con molti livelli nidificati (ad esempio MongoDB);
- Database grafico: anziché le righe e le colonne tradizionali, questo database utilizza nodi e spigoli per rappresentare strutture di grafici e dati di archiviazione (ad esempio Neo4J).
Database per la gestione dei big data
Diciamolo chiaramente, i database non relazionali sono più efficaci nella gestione dei big data.
Però questo non vuol dire che quelli relazionali saranno prossimi alla scomparsa e che verranno sostituiti da quelli non relazionali.
Anzi, mi spiego meglio.
Secondo il mio parere personale i database relazionali serviranno nel futuro nel facilitare la gestione dei big data, supportando quelli non relazionali.
Attualmente i RDBMS hanno ancora un ruolo primario e lo dimostra il fatto che sei dei dieci migliori database sono relazionali (vedi fonte Forbes).
Tutto ciò deriva da una serie di ragioni.
Prima di tutto per quanto le imprese possano voler adottare NoSQL per domare quantità di dati non strutturati, la maggior parte dei loro carichi di lavoro rimane di natura transazionale, che è il punto forte degli RDBMS.
Una seconda ragione è che gli strumenti di analisi per NoSQL sono ancora agli inizi.
Come sottolinea l’analista di Gartner Lyn Robison, gli strumenti di analisi intuitivi per NoSQL non sono strumenti di analisi user-friendly e “occorreranno anni affinché gli strumenti analitici maturino e diventino accessibili alle persone che non sono data scientist“.
Una terza ragione più difficile da quantificare e superare è rappresentata dalla cultura.
Le imprese, infatti, hanno trascorso gli ultimi 30 anni con database relazionali, ed è complicato modificare tale tendenza da un giorno all’altro.
In definitiva, i database relazionali ottengono la massima efficacia quando occorre effettuare analisi statistica dei dati e report di sintesi.
Infatti, ottengono ottimi risultati quando l’analisi dei dati permette di:
- Utilizzare “metadati”, ossia informazioni che descrivono i dati, i metodi e il significato della raccolta dei dati;
- mantenere i dati ben organizzati, accessibili e relativamente facili da vedere e capire;
- sapere a priori il tipo esatto e la quantità di dati che si andranno ad utilizzare.
Se il fine ultimo dell’organizzazione dei tuoi dati all’interno di un database è quello di effettuare analisi dati con reporting e statistiche allora i database relazionali sono la scelta ragionevole per supportare la maggior parte delle applicazioni quotidiane.
Al contrario, i database NoSQL possono essere più adatti dei database relazionali se si affrontano uno o più di questi problemi:
- I dati hanno una struttura piccola o inconsistente;
- I dati devono essere distribuiti su più di una macchina;
- La velocità è più importante della precisione.
- I dati sono molto elevati e sono di tipo non strutturato.
Quindi, se hai bisogno di gestire il web o altro volume di dati internet e applicazioni di analisi in tempo reale allora sono più adatti i database non relazionali.
Al momento la maggior parte degli esperti del settore preferisce lavorare con entrambe le necessità, in modo da utilizzare il database non relazionale per la ricerca di dati al minore livello di dettaglio e focalizzarsi sull’analisi vera e propria di dati aggregati tramite database relazionale.