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.