Cos'è NoSQL?

Database non relazionali, ad elevate prestazioni con modelli di dati flessibili

Cosa sono i database NoSQL?

I database NoSQL sono appositamente realizzati per modelli di dati specifici e hanno schemi flessibili per creare applicazioni moderne. I database NoSQL si sono affermati per la facilità di sviluppo, la funzionalità e la scalabilità delle prestazioni. Utilizzano molteplici modelli di dati, tra cui documento, grafo, chiave-valore, in memoria e ricerca. Questa pagina include risorse per aiutarti a capire meglio i database NoSQL e iniziare a utilizzarli.

Per decenni, il modello di dati predominante, utilizzato per lo sviluppo delle applicazioni, è stato il modello dei dati relazionale utilizzato dai database relazionali quali Oracle, DB2, SQL Server, MySQL e PostgreSQL. Fu solo a partire dalla seconda metà del 2000 che si iniziò a utilizzare in modo significativo altri modelli di dati. Per differenziare e categorizzare queste nuove classi di database e di modelli di dati fu coniato il termine “NoSQL”. Spesso il termine “NoSQL” viene usato in alternativa a “non relazionale”.


Novità sui database non relazionali dedicati di AWS

Come funziona un database NoSQL (non relazionale)?

I database NoSQL utilizzano molteplici modelli di dati per accedere e gestire i dati, quali documento, grafo, chiave-valore, in memoria e ricerca. Questi tipi di database sono ottimizzati specificatamente per applicazioni che necessitano di grandi volumi di dati, latenza bassa e modelli di dati flessibili, ottenuti snellendo alcuni dei criteri di coerenza dei dati degli altri database.

Consideriamo l'esempio della creazione di un modello di schema per il database di un semplice libro:

  • In un database relazionale, il record di un libro spesso viene smontato (o "normalizzato") e archiviato in tabelle distinte; le relazioni sono definite da vincoli di chiavi primarie ed esterne. In questo esempio, la tabella Libri ha colonne per ISBN, Titolo libro e Numero edizione, la tabella Autori ha colonne per IDAutore e Nome autore e infine la tabella ISBN-autore ha colonne per IDAutore e ISBN. Il modello relazionale è progettato per permettere al database di attuare l'integrità referenziale tra le tabelle del database, normalizzato per ridurre la ridondanza e generalmente ottimizzato per lo storage.
  • In un database NoSQL, il record di un libro è solitamente memorizzato come documento JSON. Per ogni libro, l'elemento, ISBN, Titolo libro, Numero edizione, Nome autore e IDAutore sono archiviati come attributi in un unico documento. In questo modello, i dati sono ottimizzati per lo sviluppo intuitivo e la scalabilità orizzontale.

Perché dovrei utilizzare un database NoSQL?

I database NoSQL sono una soluzione ideale per molte applicazioni moderne, quali dispositivi mobili, Web e videogiochi che richiedono database flessibili, scalabili, con prestazioni elevate ed altamente funzionali per offrire un'esperienza utente eccezionale.

  • Flessibilità: i database NoSQL offrono generalmente schemi flessibili che consentono uno sviluppo più veloce e iterativo. Il modello di dati flessibile fa dei database NoSQL la soluzione ideale per i dati semi-strutturati e non strutturati.
  • Scalabilità: i database NoSQL in genere sono progettati per il dimensionamento orizzontalmente, attuato usando cluster distribuiti di hardware, invece del dimensionamento verticalmente, che avviene aggiungendo server costosi e di grosse dimensioni. Alcuni fornitori di cloud gestiscono queste operazioni dietro le quinte offrendo un servizio completamente gestito.
  • Elevate prestazioni: i database NoSQL sono ottimizzati per modelli di dati specifici, (quali documento, chiave-valore e grafo) e schemi di accesso che consentono prestazioni più elevate rispetto ai risultati che si ottengono cercando di raggiungere una funzionalità simile con i database relazionali.
  • Altamente funzionali: i database NoSQL offrono API altamente funzionali e tipi di dati che sono dedicati a ciascuno dei rispettivi modelli di dati.

Tipi di database NoSQL

nosql_keyvalue_g

Chiave-valore: i database chiave-valore sono altamente partizionabili e consentono dimensionamento orizzontale a livelli che altri tipi di database non possono raggiungere. Il modello di dati chiave-valore è particolarmente adatto per casi d'uso quali i videogiochi, le tecnologie pubblicitarie e l'IoT. Amazon DynamoDB è progettato per fornire una latenza costante non superiore a una decina di millisecondi su qualsiasi scala. Questa performance costante rappresenta gran parte del motivo per cui la funzionalità Snapchat Stories, che include il più grande carico di lavoro in scrittura di Snapchat, è passata a DynamoDB.

nosql_document_g

Documento: alcuni sviluppatori non pensano al proprio modello di dati in termini di righe e colonne denormalizzate. Tipicamente, nel livello dell'applicazione, i dati sono rappresentati come un documento JSON perché è più intuitivo per gli sviluppatori pensare al proprio modello di dati come a un documento. La popolarità dei database di documenti è aumentata perché gli sviluppatori possono rendere permanenti i dati in un database usando lo stesso formato di modello di documento che usano nel codice dell'applicazione. DynamoDB e MongoDB sono database di documenti ampiamente diffusi che forniscono API potenti e intuitive per uno sviluppo flessibile e agile.

nosql_graph_g

Grafo: lo scopo di un database a grafo è facilitare la creazione e l'esecuzione delle applicazioni che operano con set di dati ad elevata connessione. I casi d'uso tipici di un database a grafo includono i social network, i motori di raccomandazione, il rilevamento di frodi e i grafi della conoscenza. Amazon Neptune è un servizio di database a grafo completamente gestito. Neptune supporta sia il modello Property Graph che il modello Resource Description Framework (RDF), offrendo la possibilità di scegliere tra due Graph API: TinkerPop e RDF/SPARQL. I database a grafo più comuni includono Neo4j e Giraph.

nosql_inmemory_g

In memoria: i videogiochi e le applicazioni per tecnologie pubblicitarie hanno casi d'uso come tabelle dei punteggi, session store e analisi in tempo reale che richiedono tempi di risposta nell'ordine di microsecondi e possono registrare picchi notevoli di traffico in qualsiasi momento. Amazon ElastiCache offre Memcached e Redis, adatti a carichi di lavoro a bassa latenza, con throughput elevato, come McDonald’s, che non possono essere garantiti con archivi dati basati su disco. Amazon DynamoDB Accelerator (DAX) è un altro esempio di archivio dati dedicato. DAX rende le letture di DynamoDB molto più veloci.

nosql_search_g

Ricerca: molte applicazioni generano log per aiutare gli sviluppatori a individuare e risolvere i problemi. Amazon Elasticsearch Service (Amazon ES) è sviluppato appositamente per fornire visualizzazioni e analisi quasi in tempo reale di dati generati automaticamente creando indici, aggregando e cercando log e parametri semi-strutturati. Amazon ES è anche un motore di ricerca potente, ad elevate prestazioni, per ricerche full text. Expedia utilizza più di 150 domini Amazon ES, 30 TB di dati e 30 miliardi di documenti per una molteplicità di casi d'uso mission-critical, che vanno dal monitoraggio delle operazioni all'individuazione e risoluzione dei problemi, al tracciamento dello stack applicativo distribuito e l'ottimizzazione dei prezzi.

Confronto tra database SQL (relazionali) e NoSQL (non relazionali)

Sebbene via siano molti tipi di database NoSQL con varie caratteristiche, nella tabella seguente sono riportate alcune delle differenze tra i database SQL e NoSQL.

Database relazionali Database NoSQL

Carichi di lavoro ottimali

I database relazionali sono progettati per le applicazioni transazionali e OLTP (online transaction processing) fortemente coerenti e sono validi anche per l'OLAP (online analytical processing). I database NoSQL basati su chiave-valore, documento, grafo e in memoria sono progettati per l'OLTP per molti schemi di accesso ai dati che includono le applicazioni a bassa latenza. I database NoSQL di ricerca sono progettati per l'analisi di dati semi-strutturati. 
Modello di dati

Il modello relazionale normalizza i dati in tabelle che sono costituite da righe e colonne. Uno schema definisce rigidamente tabelle, righe, colonne, indici, relazioni tra tabelle e ulteriori elementi del database. Il database attua l'integrità referenziale nelle relazioni tra le tabelle. 

I database NoSQL offrono molteplici modelli di dati, tra cui documento, grafo, chiave-valore, in memoria e ricerca.
Proprietà ACID

Gli RDBMS tradizionali supportano le proprietà ACID di un database relazionale: atomicità, coerenza, isolamento e durabilità.

  • Atomicità richiede che una transazione viene eseguita completamente o non viene eseguita affatto.
  • Coerenza richiede che, una volta confermata una transazione, i dati devono essere conformi allo schema del database.
  • Isolamento richiede che le transazioni simultanee siano eseguite separatamente l'una dall'altra.
  • Durabilità richiede la capacità di ripristinare i dati all'ultimo stato conosciuto in seguito a un guasto del sistema o a un'interruzione dell'alimentazione imprevisti.
I database NoSQL spesso rinunciano ad alcune proprietà ACID dei database relazionali a favore di un modello di dati più flessibile e scalabile orizzontalmente. Queste caratteristiche rendono i database NoSQL un'ottima scelta per i casi d'uso a throughput elevato e bassa latenza che richiedono scalabilità orizzontale superando i limiti di un'istanza singola.
Prestazioni Le prestazioni dipendono generalmente dal sottosistema di dischi. Per raggiungere il massimo livello di prestazioni, spesso è necessario ottimizzare query, indici e struttura delle tabelle. Le prestazioni si calcolano generalmente in funzione delle dimensioni del cluster dell'hardware, della latenza di rete e dell'applicazione di chiamata.
Scalabilità La scalabilità, nei database relazionali, avviene tipicamente in verticale, incrementando le capacità di elaborazione dell'hardware, oppure in orizzontale aggiungendo repliche per i carichi di lavoro di sola lettura. I database NoSQL sono in genere partizionabili perché gli schemi di accesso chiave-valore sono in grado di ridimensionarsi in orizzontale usando l'architettura distribuita per aumentare il throughput che offre prestazioni coerenti quasi senza alcun limite di scalabilità.
API Le richieste di archiviazione e ripristino dati vengono comunicate tramite query conformi al linguaggio SQL (Structured Query Language). Queste query sono analizzate ed eseguite dal database relazionale. Le API basate su oggetti consentono agli sviluppatori di app di archiviare e ripristinare facilmente strutture di dati in memoria. Le chiavi di partizione danno alle app l'istruzione di cercare coppie chiave-valore, serie di colonne o documenti semi-strutturati contenenti oggetti e attributi serializzati delle app.

Terminologia SQL e NoSQL

Nella tabella seguente viene confrontata la terminologia utilizzata da una selezione di database NoSQL con quella dei database SQL.

SQL MongoDB DynamoDB Cassandra  Couchbase
Tabella Raccolta Tabella Tabella Bucket di dati
Riga Documento Elemento Riga Documento
Colonna Campo Attributo Colonna Campo
Chiave principale ObjectId Chiave principale
Chiave principale ID documento
Indice Indice Indice secondario Indice Indice
Visualizzazione Visualizzazione Indice secondario globale Vista materializzata Visualizzazione
Oggetto o tabella annidata Documento incorporato Mappatura Mappatura Mappatura
Array Array Elenco Elenco Elenco
Elenco
Elenco
Chiave principale

Inizia a utilizzare DynamoDB

DynamoDB è molto semplice da utilizzare. Vedi la pagina Web Nozioni di base su Amazon DynamoDB per creare la prima tabella con poche, semplici operazioni. Puoi scaricare un whitepaper AWS, per conoscere le best practice per migrare i carichi di lavoro da un sistema RDBMS (Relational Database Management System) a DynamoDB.

Cos'è Amazon DynamoDB?