Home/ Wiki/ Siti Web/ Database NoSQL

Database NoSQL

Oltre il modello relazionale: Document DB, Key-Value store, Column-Family e Graph database per applicazioni moderne ad alta scalabilità.

Indice dei contenuti
Aggiornato: Aprile 2026 11 min di lettura

Cosa sono i database NoSQL

Il termine NoSQL (Not Only SQL) identifica una famiglia di sistemi di gestione dati che non seguono il modello relazionale tradizionale. Nati per rispondere alle esigenze di applicazioni web su larga scala — social network, e-commerce, IoT — i database NoSQL rinunciano ad alcune garanzie dei database relazionali (come le transazioni ACID complete) in favore di scalabilità orizzontale, flessibilità dello schema e prestazioni elevate.

"NoSQL non significa 'contro SQL', ma 'non solo SQL'. Spesso la soluzione migliore combina entrambi gli approcci."

Document Database

I document database memorizzano i dati come documenti (tipicamente JSON o BSON), ciascuno con una struttura potenzialmente diversa. Il più diffuso è MongoDB.

// Documento MongoDB - collezione "studenti"
{
    "_id": ObjectId("64a7b2c3d4e5f6a7b8c9d0e1"),
    "nome": "Marco",
    "cognome": "Rossi",
    "email": "marco.rossi@uni.it",
    "esami": [
        { "materia": "Analisi I", "voto": 28, "data": "2025-06-15" },
        { "materia": "Programmazione", "voto": 30, "data": "2025-07-10" }
    ],
    "indirizzo": {
        "via": "Via Roma 1",
        "citta": "Milano",
        "cap": "20100"
    }
}

Vantaggi: struttura annidata naturale, nessuna JOIN necessaria (i dati correlati sono incorporati nel documento), schema flessibile. Ideale per: CMS, cataloghi prodotti, profili utente, applicazioni con strutture dati eterogenee.

Key-Value Store

I key-value store sono i database NoSQL più semplici: ogni dato è associato a una chiave univoca. Redis è il più popolare, offrendo strutture dati in memoria (stringhe, liste, set, hash) con latenza sub-millisecondo.

# Redis - operazioni base
SET sessione:user123 '{"nome":"Marco","ruolo":"admin"}' EX 3600
GET sessione:user123

# Contatore visite
INCR pagina:/home/visite

# Lista ultimi articoli
LPUSH articoli:recenti "articolo:456"
LTRIM articoli:recenti 0 9

Ideale per: caching, sessioni utente, code di messaggi, classifiche in tempo reale, rate limiting. Redis è spesso usato come complemento a un database primario (SQL o document).

Column-Family

I database column-family (o wide-column) organizzano i dati in famiglie di colonne, ottimizzando le letture su grandi dataset distribuiti. Apache Cassandra è il riferimento principale, progettato per gestire petabyte di dati su cluster di centinaia di nodi.

-- Cassandra CQL (Cassandra Query Language)
CREATE TABLE metriche_sensori (
    sensore_id UUID,
    timestamp TIMESTAMP,
    temperatura FLOAT,
    umidita FLOAT,
    PRIMARY KEY (sensore_id, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC);

INSERT INTO metriche_sensori (sensore_id, timestamp, temperatura, umidita)
VALUES (uuid(), toTimestamp(now()), 22.5, 65.3);

Ideale per: dati time-series (IoT, log, metriche), sistemi con scritture massicce e distribuzione geografica.

Graph Database

I graph database modellano i dati come nodi (entità) e archi (relazioni), eccellendo nelle query che attraversano relazioni complesse. Neo4j utilizza il linguaggio Cypher:

// Neo4j Cypher - creare nodi e relazioni
CREATE (m:Studente {nome: "Marco", corso: "Informatica"})
CREATE (a:Studente {nome: "Anna", corso: "Informatica"})
CREATE (p:Professore {nome: "Prof. Bianchi"})
CREATE (e:Esame {materia: "Database", crediti: 9})

CREATE (m)-[:STUDIA]->(e)
CREATE (a)-[:STUDIA]->(e)
CREATE (p)-[:INSEGNA]->(e)

// Query: chi studia con Marco?
MATCH (m:Studente {nome: "Marco"})-[:STUDIA]->(e)<-[:STUDIA]-(colleghi)
RETURN colleghi.nome

Ideale per: social network, motori di raccomandazione, analisi delle frodi, knowledge graph, gestione delle dipendenze.

Il CAP Theorem

Il teorema CAP (Brewer, 2000) afferma che un sistema distribuito può garantire al massimo due delle tre proprietà seguenti:

ProprietàSignificato
Consistency (C)Tutti i nodi vedono gli stessi dati nello stesso momento
Availability (A)Ogni richiesta riceve una risposta (anche se non aggiornata)
Partition Tolerance (P)Il sistema continua a funzionare nonostante perdite di comunicazione tra nodi

In pratica, poiché le partizioni di rete sono inevitabili nei sistemi distribuiti, la scelta reale è tra CP (consistenza + tolleranza, es. MongoDB con write concern majority) e AP (disponibilità + tolleranza, es. Cassandra con eventual consistency).

Schema-less e flessibilità

A differenza dei database relazionali che richiedono uno schema rigido definito con DDL, i database NoSQL sono generalmente schema-less (o schema-on-read): la struttura dei dati non è imposta al momento della scrittura.

Attenzione: "Schema-less" non significa "senza struttura". Le applicazioni devono comunque gestire la coerenza dei dati. Molti team adottano la schema validation a livello applicativo (es. Mongoose per MongoDB) o direttamente nel database.

Scalabilità

La distinzione fondamentale riguarda il tipo di scalabilità:

  • Scalabilità verticale (scale-up): aggiungere CPU, RAM, storage al singolo server. Tipica dei database SQL.
  • Scalabilità orizzontale (scale-out): aggiungere nuovi nodi al cluster, distribuendo i dati tramite sharding. Tipica dei database NoSQL.

Lo sharding suddivide i dati tra più server in base a una chiave di partizione (shard key). La scelta della shard key è critica: una distribuzione non uniforme genera hotspot che annullano i vantaggi della distribuzione.

Quando SQL vs NoSQL

CriterioSQL (relazionale)NoSQL
Struttura datiBen definita, stabileVariabile, in evoluzione
RelazioniComplesse (JOIN)Semplici o incorporate
TransazioniACID completoEventual consistency (spesso)
ScalabilitàPrevalentemente verticaleOrizzontale nativa
QuerySQL standard, potenteSpecifiche per tipo di DB
Casi d'uso tipiciERP, banking, e-commerceSocial, IoT, real-time, cache

In molte architetture moderne si usa un approccio polyglot persistence: database diversi per esigenze diverse all'interno della stessa applicazione. Per approfondire come i dati vengono esposti alle applicazioni, consulta la guida su API e Web Services.