Azure Cosmos DB è il database NoSQL completamente gestito (PaaS) di Azure, progettato per applicazioni moderne che richiedono scala planetaria, bassa latenza e disponibilità continua. A differenza di un database relazionale come Azure SQL Database, Cosmos DB gestisce dati non-relazionali e semi-strutturati (documenti JSON, coppie chiave-valore, colonne, grafi) senza uno schema rigido predefinito, adattandosi bene a dati eterogenei e in continua evoluzione.
Caratteristiche distintive
Cosmos DB si riconosce all’esame per tre proprietà chiave che nessun altro servizio dati Azure offre insieme:
- Distribuzione globale (global distribution): con pochi clic puoi replicare i dati in qualsiasi regione Azure nel mondo. Gli utenti leggono e scrivono dalla replica geograficamente più vicina, riducendo la latenza. Supporta configurazioni multi-region write (multi-master) per scritture attive in più regioni contemporaneamente.
- Scalabilità elastica: throughput e storage scalano in modo indipendente e automatico. Il throughput si misura in Request Units (RU/s) e può essere gestito in modalità provisioned (capacità fissa o autoscale) o serverless (paghi solo per ciò che consumi).
- SLA completi: Microsoft garantisce contrattualmente latenza < 10 ms (letture e scritture al 99° percentile), disponibilità fino al 99,999%, throughput e consistenza. È l’unico database Azure con uno SLA sulla latenza garantito.
Un altro concetto tipico d’esame sono i livelli di consistenza (consistency levels): cinque opzioni (Strong, Bounded Staleness, Session, Consistent Prefix, Eventual) che permettono di bilanciare coerenza dei dati, latenza e disponibilità. Session è il default.
Le API di Azure Cosmos DB
Cosmos DB espone i dati attraverso più API, ognuna compatibile con un modello dati e un ecosistema esistente. Questo consente di migrare applicazioni preesistenti senza riscrivere il codice:
- API for NoSQL (chiamata anche Core): l’API nativa, lavora su documenti JSON con query in sintassi SQL-like. È la scelta consigliata per nuovi progetti perché riceve per prima tutte le nuove funzionalità.
- API for MongoDB: espone il protocollo wire di MongoDB. Ideale per migrare app MongoDB esistenti mantenendo driver e strumenti open source.
- API for Apache Cassandra: modello column-family (colonne), compatibile con applicazioni e query CQL Cassandra.
- API for Table: modello chiave-valore, evoluzione premium di Azure Table Storage, con distribuzione globale e SLA superiori.
- API for Apache Gremlin: database a grafo (nodi e archi), adatto a relazioni complesse.
Come scegliere l’API giusta
Il criterio è semplice: per un progetto nuovo si sceglie NoSQL/Core; per migrare un’applicazione esistente si sceglie l’API compatibile con la tecnologia già in uso (MongoDB, Cassandra, Table o Gremlin), per riutilizzare codice, driver e competenze.
Casi d’uso tipici
Cosmos DB brilla in scenari a scala planetaria e real-time:
- IoT e telemetria: ingestione di enormi volumi di eventi da dispositivi con scritture rapide.
- Cataloghi prodotti e-commerce: dati con attributi variabili per categoria, quindi semi-strutturati.
- Profili utente e personalizzazione: sessioni, preferenze, carrelli, tipici di app web e mobile globali.
- Applicazioni real-time: gaming, social, leaderboard che richiedono bassa latenza ovunque nel mondo.
Trappole tipiche d’esame
- Scenario: serve un database per un’app mobile globale che richiede latenza single-digit millisecond garantita in tutti i continenti → risposta: Azure Cosmos DB (unico con SLA sulla latenza e distribuzione globale nativa), non Azure SQL Database.
- Scenario: devi migrare un’applicazione esistente che usa già MongoDB su Azure con modifiche minime al codice → risposta: Cosmos DB API for MongoDB, non l’API NoSQL/Core.
- Scenario: stai avviando un progetto nuovo e vuoi la piena disponibilità delle funzionalità Cosmos DB → risposta: API for NoSQL (Core).
- Scenario: devi memorizzare e interrogare relazioni complesse tra entità (es. social network, raccomandazioni) → risposta: API for Gremlin (modello a grafo).
- Scenario: i dati sono documenti JSON semi-strutturati con campi variabili tra record → risposta: database NoSQL come Cosmos DB, non un database relazionale con schema fisso.
- Scenario: vuoi migrare da Azure Table Storage ottenendo distribuzione globale e SLA migliori → risposta: Cosmos DB API for Table.