L’importanza dei database NoSql per l’utilizzo dei Big Data nel mondo connesso dell’Internet of Things

L’importanza dei database NoSql per l’utilizzo dei Big Data nel mondo connesso dell’Internet of Things
4 aprile 2017 Ermanno Guardo

L’Internet of Things (IoT), definita oggi come la quarta rivoluzione industriale, rappresenta una radicale evoluzione di internet in una rete di oggetti interconnessi che raccolgono informazioni dall’ambiente e interagiscono con il mondo fisico per fornire servizi per il trasferimento di informazioni, analisi, applicazioni e comunicazioni. L’IoT, pertanto, ha la caratteristica di generare enormi quantità di dati ad una velocità incredibile, aprendo le porte al fenomeno dei Big Data. Quando si parla di Big Data e si considera una vasta gamma di dispositivi eterogenei non è possibile stabilire né uno schema fisso e nemmeno garantire lo stesso formato e gli stessi tipi di dati, anche tra due dispositivi del medesimo produttore. Nasce pertanto la necessità di come gestire questa enorme mole di informazioni mantenendo tempi di risposta bassi ed elevata disponibilità del servizio.

In questi scenari, i database relazionali non sempre riescono a gestire in maniera ottimale una tale quantità di dati, se non al prezzo di performance limitate e costi elevati.

Per far fronte a queste sfide, la soluzione più adatta sembra provenire dai database non relazionali (NoSQL). Essi forniscono un container schema-less per consentire l’archiviazione di dati eterogenei su larga scala in maniera indipendente da struttura o tipo.

I database NoSQL forniscono il concetto di schema on read”, che ritarda l’utilizzo di uno schema fino a quando i dati non vengono effettivamente utilizzati dall’applicazione. Questo ha enormi implicazioni sulla progettazione sia di applicazioni che di database. In questo modo, infatti, differenti sistemi possono condividere lo stesso pool di dati ed utilizzare un proprio schema in base alle esigenze.

Tuttavia questo non significa che i dati non subiscano alcuna modellazione, ma al fine di qualsiasi tipo di analisi essi dovranno essere organizzati in una struttura che sarà sicuramente adatta ad una evoluzione nel tempo con la possibilità di aggiungere facilmente nuovi campi.

Un’altra caratteristica di rilievo dei database non relazionali è legata alla possibilità di scalare orizzontalmente, aggiungendo semplicemente nuovi server per un’elaborazione parallela senza rischi operativi.

In base alle strutture con cui i dati vengono archiviati è possibile distinguere differenti tipologie di database NoSQL:

Column Store (Cassandra, HBase): i dati vengono memorizzati in colonne, in coppie chiave/valore e sono solitamente utilizzati per archiviare i dati i modo distribuito.

Document Store (MongoDB, Couch DB): progettati per organizzare i dati in documenti, solitamente in formato BSON (Binary JSON) o XML, a cui si accede tramite API per le interrogazioni. Sono molto utilizzati nelle applicazioni web.

Key/Value Store (Membase, Redis): i dati sono memorizzati in una hash table come coppia chiave-valore. Sono indicati per applicazioni con carichi di lavoro molto elevati come social network, videogiochi o sistemi di caching.

Graph Data Store (Neo4J, InfoGrid): l’archiviazione dei dati avviene seguendo un modello a grafo e l’accesso ad archi e nodi avviene attraverso algoritmi di ricerca su grafo. Sono molto utilizzati nei social network.

I database NoSQL non nascono per sostituire quelli relazionali ma come alternativa ad essi perché risolvono alcuni limiti dei precedenti come la scalabilità, offrendo una migliore gestione di grossi volumi di dati, tipico degli scenari IoT in cui le informazioni provenienti dai sensori attivi 24 ore su 24 diventano rilevanti. In altre circostanze i database relazionali rimangono la scelta migliore soprattutto quando si desidera una maggiore affidabilità e sicurezza delle transazioni effettuate o maggiore supporto al verificarsi di un problema.

Non esiste quindi una tipologia migliore dell’altra e pertanto la scelta sarà strettamente legata allo scenario applicativo che si intende sviluppare.