Cosa sono i database NoSQL?
Scopri NoSQL, un tipo di design di database che offre maggiore flessibilità rispetto a un database tradizionale
Cerchi di filo blu su un tavolo
Cos'è un database NoSQL?

NoSQL, noto anche come "non solo SQL", "non SQL", è un approccio al design di database che consente lo storage e l'esecuzione di query dei dati al di fuori delle strutture tradizionali che si trovano nei database relazionali. Sebbene possa comunque archiviare i dati trovati all'interno dei sistemi di gestione di database relazionali (RDBMS), li memorizza semplicemente in modo diverso rispetto a un RDBMS. La decisione di utilizzare un database relazionale rispetto a un database non relazionale è in gran parte legata al contesto e varia a seconda del caso di utilizzo.

Invece della tipica struttura tabulare di un database relazionale, i database NoSQL ospitano i dati all'interno di una struttura dati, come ad esempio un documento JSON. Poiché questo design di database non relazionale non richiede uno schema, offre una rapida scalabilità per gestire set di dati di grandi dimensioni e tipicamente non strutturati. 

NoSQL è anche un tipo di database distribuito, il che significa che le informazioni vengono copiate e archiviate su vari server, che possono essere remoti o locali. Ciò garantisce disponibilità e affidabilità dei dati. Se alcuni dei dati vanno offline, il resto del database potrà comunque continuare a funzionare.  

Le aziende odierne, in quasi tutti i settori, devono gestire grandi volumi di dati a velocità elevate con una capacità di scalabilità rapida per eseguire le moderne applicazioni web. In questa era di crescita in cloud, big data e applicazioni mobili e web, i database NoSQL forniscono quella velocità e scalabilità che li rende una scelta diffusa per le loro prestazioni e facilità d'uso. 

Confronto tra NoSQL ed SQL

Quando si parla di NoSQL, si fa comunemente riferimento a SQL (structured query language). Per comprendere meglio la differenza tra NoSQL ed SQL, può essere utile comprendere la storia di SQL, un linguaggio di programmazione utilizzato per recuperare informazioni specifiche da un database.  

Prima dei database relazionali, le aziende utilizzavano un sistema di database gerarchico con una struttura ad albero per le tabelle di dati. Questi primi sistemi di gestione dei database (DBMS) consentivano agli utenti di organizzare grandi quantità di dati. Tuttavia, erano complessi, spesso proprietari di una particolare applicazione e limitati nelle modalità di rilevamento all'interno dei dati. Queste limitazioni alla fine portarono allo sviluppo di sistemi di gestione di database relazionali, che ordinavano i dati in tabelle. SQL ha fornito un'interfaccia per interagire con i dati relazionali, consentendo agli analisti di collegare le tabelle unendo campi comuni.

Con il passare del tempo, l'esigenza di un utilizzo più rapido e più eterogeneo di grandi set di dati è diventata sempre più importante per la tecnologia emergente, come ad esempio le applicazioni di e-commerce. I programmatori avevano bisogno di un'alternativa più flessibile rispetto ai database SQL (ovvero i database relazionali). NoSQL è diventato quell'alternativa. 

Mentre NoSQL ha fornito un'alternativa a SQL, questo progresso non ha in alcun modo soppiantato i database SQL. Ad esempio, supponiamo che tu stia gestendo gli ordini al dettaglio di un'azienda. In un modello relazionale, le singole tabelle gestirebbero separatamente i dati dei clienti, degli ordini e dei prodotti e verrebbero unite tramite una chiave comune univoca, come un ID cliente o un ID ordine. Sebbene questo metodo sia ottimo per archiviare e recuperare rapidamente i dati, richiede una quantità di memoria significativa. Quando aggiungi memoria ai database SQL, puoi eseguirne la scalabilità solo verticalmente, non orizzontalmente, il che significa che la capacità di aggiungere più memoria è limitata all'hardware disponibile. Il risultato è che la scalabilità verticale alla fine limita la capacità di storage e recupero dei dati della tua azienda.

In confronto, i database NoSQL sono non relazionali, il che elimina la necessità di collegare le tabelle.Le funzionalità integrate di partizionamento orizzontale e alta disponibilità facilitano la scalabilità orizzontale. Se un singolo server di database non è sufficiente per archiviare tutti i tuoi dati o gestire tutte le query, il carico di lavoro può essere suddiviso su due o più server, consentendo alle aziende di eseguire la scalabilità orizzontale dei loro dati.

Sebbene ogni tipo di database abbia i suoi vantaggi, in una singola applicazione le aziende utilizzano comunemente sia NoSQL che database relazionali. I fornitori di servizi cloud moderni possono supportare database SQL o NoSQL. La scelta del database da selezionare dipende dai tuoi obiettivi

Per un approfondimento sulle differenze tra le due opzioni, consulta "SQL vs. NoSQL Databases: What's the Difference?"

Tipi di database NoSQL

NoSQL offre altre opzioni per organizzare i dati in modi diversi. Offrendo strutture di dati eterogenee, NoSQL può essere applicato all'analytics dei dati, alla gestione di big data, ai social network e allo sviluppo di applicazioni per dispositivi mobili. 

Un database NoSQL gestisce le informazioni utilizzando uno di questi modelli di dati primari: 

Archivio di chiavi-valori

Questa è generalmente considerata la forma più semplice di database NoSQL. Questo modello di dati senza schema è organizzato in un dizionario di coppie chiave-valore, in cui ogni elemento ha una chiave e un valore. La chiave potrebbe essere qualcosa di simile a quanto presente in un database SQL, come un ID del carrello della spesa, mentre il valore è un array di dati, come ogni singolo articolo nel carrello della spesa dell'utente. Viene comunemente utilizzato per la memorizzazione nella cache e l'archiviazione delle informazioni sulla sessione utente, come i carrelli della spesa. Tuttavia, non è l'ideale quando è necessario estrarre più record alla volta. Redis e Memcached sono esempi di database di chiavi-valori open source.

Archivio di documenti

Come suggerisce il nome, i database di documenti archiviano i dati come documenti. Possono essere utili nella gestione di dati semi-strutturati e i dati vengono generalmente archiviati nei formati JSON, XML o BSON. Ciò mantiene i dati insieme quando vengono utilizzati nelle applicazioni, riducendo la quantità di conversione necessaria per utilizzare i dati. Gli sviluppatori acquisiscono anche una maggiore flessibilità poiché gli schemi di dati non devono necessariamente corrispondere tra i documenti (ad es. name rispetto a first_name). Tuttavia, ciò può risultare problematico per transazioni complesse, portando al danneggiamento dei dati. I casi di utilizzo più diffusi dei database di documenti includono sistemi di gestione di contenuti e profili utente. Un esempio di database orientato ai documenti è MongoDB, il componente database dello stack MEAN.

Vuoi saperne di più su MongoBD? Dai un'occhiata all'esercitazione IBM per un'introduzione all'utilizzo di IBM Cloud Databases for MongoDB. 

Archivio di colonne larghe

Questi database memorizzano le informazioni in colonne, consentendo agli utenti di accedere solo alle specifiche colonne di cui hanno bisogno senza allocare memoria aggiuntiva per dati irrilevanti. Questo database tenta di risolvere le carenze legate agli archivi di chiavi-valori e di documenti ma, poiché può risultare un sistema più complesso da gestire, il suo utilizzo non è consigliato per i team e i progetti più recenti. Apache HBase e Apache Cassandra sono esempi di database a colonne larghe open source. Apache HBase è sviluppato su Hadoop Distributed Files System, che fornisce un modo per archiviare set di dati sparsi, che è comunemente usato in molte applicazioni di big data. Apache Cassandra, invece, è stato progettato per gestire grandi quantità di dati su più server e cluster che si estendono su più data center. È stato utilizzato in diversi casi di utilizzo, come ad esempio per siti web di social network e analytics dei dati in tempo reale.

Archivio di grafi

Questo tipo di database ospita in genere i dati da un grafo di conoscenza. Gli elementi di dati sono memorizzati come nodi, archi e proprietà. Qualsiasi oggetto, luogo o persona può essere un nodo. Un arco definisce la relazione tra i nodi. Per esempio, un nodo potrebbe essere un cliente, come IBM, e un'agenzia, come Ogilvy. Un arco sarebbe la categorizzazione della relazione come una relazione di clientela tra IBM e Ogilvy.

I database di grafi vengono utilizzati per archiviare e gestire una rete di connessioni tra gli elementi all'interno del grafo. Neo4j (link esterno a IBM) è un servizio di database basato sui grafi e basato su Java con un'edizione community open source in cui gli utenti possono acquistare licenze per il backup online ed estensioni per l'alta disponibilità o una versione su licenza preimpacchettata con backup ed estensioni inclusi. 

Archivio In-memory

Con questo tipo di database, come ad esempio  IBM solidDB, i dati risiedono nella memoria principale anziché su disco, rendendo l'accesso ai dati più rapido rispetto ai tradizionali database basati sui dischi. 

Esempi di database NoSQL

Molte aziende hanno fatto il loro ingresso nel settore del NoSQL. In aggiunta a quelli sopra menzionati, ecco alcuni database NoSQL di ampio utilizzo: 

  • Apache CouchDB, un database JSON open source basato sui documenti che utilizza JavaScript come suo linguaggio di query. 
  • Elasticsearch, un database basato sui documenti che include un motore di ricerca full-text. 
  • Couchbase, un database di chiavi-valori e documenti che consente agli sviluppatori di creare applicazioni reattive e flessibili per il cloud, i dispositivi mobili e l'edge computing. 

Per saperne di più sullo stato dei database, consulta "A Brief Overview of the Database Landscape."

Vantaggi di NoSQL

Ogni tipo di database NoSQL ha punti di forza che lo rendono più indicato per specifici casi di utilizzo. Tuttavia, tutti condividono i seguenti vantaggi per gli sviluppatori e creano il framework per fornire un servizio migliore ai clienti, tra cui: 

  • Efficacia dei costi: mantenere un RDBMS commerciale di fascia alta è costoso. Questi prodotti richiedono l'acquisto di licenze, responsabili della gestione dei database qualificati e hardware potente per eseguire la scalabilità verticale. I database NoSQL ti consentono di eseguire rapidamente la scalabilità orizzontale, allocando meglio le risorse per ridurre al minimo i costi. 
  • Flessibilità: l'adozione della scalabilità orizzontale e di un modello di dati flessibile significa anche che i database NoSQL sono in grado di gestire grandi volumi di dati in rapida evoluzione, rendendo questi database ideali per uno sviluppo agile, iterazioni rapide e frequenti push di codice. 
  • Replica: la funzionalità di replica NoSQL copia e archivia i dati su più server. Questa replica fornisce l'affidabilità dei dati, garantendo l'accesso durante i periodi di inattività e proteggendo dalla perdita di dati se i server vanno offline. 
  • Velocità: NoSQL consente uno storage e un'elaborazione più rapidi e agili per tutti gli utenti, dagli sviluppatori ai team di vendita ai clienti. La velocità rende inoltre i database NoSQL generalmente più adatti per applicazioni web moderne e complesse, siti di e-commerce o applicazioni per dispositivi mobili.  

In poche parole, i database NoSQL forniscono prestazioni, disponibilità e scalabilità elevate. 

Casi di utilizzo di NoSQL

La struttura e il tipo di database NoSQL che scegli dipenderanno da come la tua organizzazione prevede di utilizzarlo. Ecco alcuni usi specifici per i vari tipi di database NoSQL. 

  • Gestione delle relazioni tra dati: la gestione della complessa aggregazione dei dati e delle relazioni tra questi punti viene generalmente gestita con un database NoSQL basato sui grafi. Ciò include motori di consigli, grafi di conoscenza, applicazioni di rilevamento delle frodi e social network, in cui vengono stabilite connessioni tra persone che utilizzano vari tipi di dati. 
  • Prestazioni a bassa latenza: i giochi, le applicazioni per l'home fitness e la tecnologia pubblicitaria richiedono tutti una velocità effettiva elevata per una gestione dei dati in tempo reale. Questa infrastruttura offre il massimo valore al consumatore, sia che si tratti degli aggiornamenti delle offerte di mercato o della visualizzazione degli annunci pubblicitari più pertinenti. Le applicazioni web richiedono database NoSQL in-memory per fornire tempi di risposta rapidi e gestire i picchi di utilizzo senza il ritardo che può derivare dallo storage su disco. 
  • Scalabilità e grandi volumi di dati: l'e-commerce richiede la capacità di gestire enormi picchi di utilizzo, sia che si tratti di una vendita di un giorno o del periodo di shopping natalizio. I database di chiavi-valori sono spesso utilizzati nelle applicazioni di e-commerce perché la loro struttura semplice è facilmente scalabile durante i periodi di traffico intenso. Questa agilità è preziosa per le applicazioni di gioco, di tecnologia pubblicitaria e per l'IoT (Internet of Things). 
Microservizi e database NoSQL

La necessità per le grandi aziende di fornire servizi senza latenza e di eseguire la scalabilità più rapidamente ha stimolato la crescita dei microservizi, che ha portato le aziende a esaminare quale tipo di database utilizzare per le diverse applicazioni. 

Le aziende hanno riscontrato che l'utilizzo di un singolo database relazionale per ogni componente di un'applicazione presenta dei limiti, soprattutto quando esistono alternative migliori per componenti specifici. I microservizi rappresentano, in parte, un'opzione interessante perché eliminano la necessità di un unico archivio dati condiviso per un'intera applicazione. L'applicazione ha invece molti servizi accoppiati in modo lasco e implementabili in modo indipendente, ciascuno con il proprio modello di dati e database e integrati tramite gateway API o un iPaaS

Il modello di utilizzo di più database all'interno di una singola applicazione, noto anche come persistenza poliglotta, ha contribuito a creare spazio sul mercato per consentire ai database NoSQL di prosperare. Oggi gli sviluppatori possono sfruttare il database più adatto per uno specifico microservizio senza cercare di far funzionare tutto nel contesto di un singolo database relazionale. 

Soluzioni IBM
Scopri quale tipo di database utilizzare

Esplora i diversi fattori da considerare mentre provi a determinare le migliori opzioni di database durante il refactoring a un approccio basato sui microservizi.

Scopri di più sui database per i microservizi
Microservizi IBM®

Scopri i microservizi (o architettura a microservizi), un approccio architetturale nativo del cloud in cui una singola applicazione è composta da molti componenti, o servizi, più piccoli, accoppiati in modo lasco e implementabili in modo indipendente.

Scopri il valore dei microservizi
Risorse Confronto tra database SQL e NoSQL: qual è la differenza?

Esplora le principali differenze tra i database SQL e NoSQL e scopri quale tipo di database è il migliore per i vari casi di utilizzo.

Utilizzo di un database NoSQL per gestire le informazioni in un moderno ambiente di vendita al dettaglio

Scopri come accelerare il passaggio allo shopping online.

Passa alla fase successiva

Oggi molte applicazioni vengono fornite come servizi e tali servizi devono essere disponibili 24 ore su 24, 7 giorni su 7, accessibili da un'ampia gamma di dispositivi e adattati in scala a quelli che possono essere potenzialmente milioni di utenti. IBM Cloudant è un database di documenti JSON scalabile, ottimizzato per le applicazioni web, per dispositivi mobili, IoT e serverless. Il servizio è compatibile con un ecosistema open source che include Apache CouchDB, PouchDB e le librerie per gli stack di sviluppo web e per dispositivi mobili più diffusi.

Prova subito IBM Cloudant