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.
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?"
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:
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.
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.
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.
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.
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.
Molte aziende hanno fatto il loro ingresso nel settore del NoSQL. In aggiunta a quelli sopra menzionati, ecco alcuni database NoSQL di ampio utilizzo:
Per saperne di più sullo stato dei database, consulta "A Brief Overview of the Database Landscape."
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:
In poche parole, i database NoSQL forniscono prestazioni, disponibilità e scalabilità elevate.
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.
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.
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 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.
Esplora le principali differenze tra i database SQL e NoSQL e scopri quale tipo di database è il migliore per i vari casi di utilizzo.
Scopri come accelerare il passaggio allo shopping online.