Creare un'istanza di Cosmos DB

Completato

In questa unità viene descritto Azure Cosmos DB e in che modo organizza i dati. Si apprenderà come usare Visual Studio Code per creare e gestire database e contenitori Azure Cosmos DB.

Cos'è Azure Cosmos DB?

Azure Cosmos DB è un servizio cloud che implementa database di documenti. I dati in un documento devono essere conformi alla sintassi JSON. Un documento JSON può contenere proprietà, documenti secondari e matrici di documenti.

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "partitionKey": "Bikes",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 }
      ]
}

A differenza di una tabella in un database relazionale, i documenti in Azure Cosmos DB non seguono uno schema definito. In questo modo il database può contenere vari documenti con forme e dimensioni diverse. È possibile, ad esempio, archiviare informazioni di diverso tipo su clienti diversi nello stesso database. È anche possibile registrare una cronologia degli indirizzi completa come matrice per un cliente. È possibile registrare informazioni aggiuntive, ad esempio l'affidabilità creditizia.

Il servizio cloud Azure Cosmos DB è organizzato in modo gerarchico. Nella parte superiore è presente un account Azure Cosmos DB (la risorsa). L'account Azure Cosmos DB è l'unità di sicurezza per un set di database. L'account Azure Cosmos DB specifica la posizione dei database insieme alle informazioni di sicurezza necessarie per accedere a tali database. All'interno di un account, è possibile creare uno o più database. È possibile creare uno o più contenitori all'interno di ogni database. Nei contenitori vengono archiviati i documenti.

Conceptual image of parent-child relationship of account, database, and container in Cosmos D B.

Contenitori e chiavi di partizione di Cosmos DB

Ogni contenitore è organizzato come una serie di partizioni. Le partizioni corrispondono approssimativamente ai file fisici sul disco. Una partizione di grandi dimensioni può avere un proprio file, ma diverse partizioni di piccole dimensioni possono essere combinate in un singolo file. Ogni documento ha una chiave di partizione che definisce la partizione a cui appartiene. Si usa il partizionamento per archiviare insieme i documenti correlati e per ottimizzare la modalità di accesso ai dati.

L'esempio seguente illustra un documento JSON che archivia le informazioni sui prodotti, come parte di un’applicazioneContoso. Poiché questi dati provengono da un altro sistema, gli ID sono già configurati per essere GUID. Nel proprio contenitore è possibile portare l'ID o consentire a Cosmos DB di specificarne uno. Quando si inserisce un nuovo documento, è necessario specificare l'ID e la chiave di partizione (se si usano chiavi di partizione).

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "categoryName": "Bikes, Touring Bikes",
    "sku": "BK-T79U-50",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "tags": [
        {
            "_id": "27B7F8D5-1009-45B8-88F5-41008A0F0393",
            "name": "Tag-61"
        }
    ],
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 },
        { "location": "Boston", "inventory": 4 },
        { "location": "Miami", "inventory": 12 },
        { "location": "San Diego", "inventory": 58 }
      ]
}

La società Contoso ha deciso di usare il nome della categoria, categoryName, come chiave di partizione, perché fornisce una distribuzione uniforme dei documenti nel contenitore. Il campo della chiave di partizione viene impostato per il contenitore al momento della creazione del contenitore. Per ogni nuovo documento inserito nel contenitore, la chiave di partizione viene inclusa come parte del documento JSON. Nell'esempio precedente, i requisiti minimi per un documento formato correttamente sono l'ID univoco e come chiave di partizione, id e categoryName. Se si porta un set di dati da un altro sistema e si vuole mantenere il relativo ID univoco per connettersi ad altri sistemi, è possibile scegliere di usare il id campo o consentire a Cosmos DB di creare un nuovo id univoco id e l'ID potrebbe essere archiviato in un nome di proprietà separato.

Nota

Azure Cosmos DB aggiunge alcuni campi ai documenti. Molti di questi campi vengono usati per scopi interni e nella maggior parte dei casi non bisogna modificarli direttamente. L’eccezione è un campo denominato id. Cosmos DB usa questo campo per identificare il documento nel database e ogni documento deve avere un valore di id univoco.

Costo per pianificare la velocità effettiva di Azure Cosmos DB

Azure Cosmos DB usa il concetto di unità richiesta al secondo (UR/sec) per gestire le prestazioni e la fatturazione dei database. Questa misura astrae le risorse fisiche sottostanti di cui è necessario effettuare il provisioning per supportare le prestazioni necessarie. Quando si crea un database o un contenitore, si specifica il numero di UR/sec da allocare. I costi verranno addebitati di conseguenza.

Il costo per eseguire una lettura di punti, (che recupera un singolo elemento in base al valore ID e alla chiave di partizione corrispondenti), per un elemento da 1 KB è 1 unità richiesta (o 1 UR). In modo analogo, a tutte le altre operazioni di database viene assegnato un costo in termini di UR. I costi vengono sempre misurati in UR, indipendentemente dall'API usata per interagire con il contenitore di Azure Cosmos DB. Sia che l'operazione di database sia una scrittura, una lettura di punti o una query, i costi sono sempre misurati in UR.

Se si effettua il provisioning di 400 UR/sec e si emette una query che costa 40 UR, sarà possibile emettere 10 query di questo tipo al secondo. Eventuali richieste superiori saranno soggette a un limite di velocità e dovranno essere ripetute. Se si usano driver del client, è supportata la logica di ripetizione automatica.

Per mantenere le UR/sec il più basse possibile, tenere presente quanto segue:

Oggetto Considerazioni
Dimensioni del documento Un documento più grande in KB aumenta le UR.
Indicizzazione del documento L'indicizzazione con prestazioni elevate può ridurre le UR.
Numero di proprietà del documento Se si indicizzano tutte le proprietà, l'uso di più proprietà aumenterà le UR. L'indicizzazione selettiva delle proprietà chiave richiederà un minor numero di UR.
Coerenza dei dati I livelli di coerenza assoluta e ristretta utilizzano più UR rispetto ad altri livelli di coerenza rilassata.
Tipo di letture del documento La lettura del punto che usa l'ID e la chiave di partizione di un elemento costano significativamente meno UR rispetto alle query.
Modelli di query La complessità di una query influisce sulla quantità di UR utilizzate.
Uso degli script Le stored procedure, i trigger e le funzioni definite dall'utente usano UR oltre alle query all'interno di questi script.

Accesso a Cosmos DB

Azure Cosmos DB include i modi seguenti per connettersi a Cosmos DB:

  • Visual Studio Code
  • SDK JavaScript (e altro linguaggio)
  • Azure portal
  • Interfaccia della riga di comando di Azure
  • PowerShell
  • REST API

API di Azure Cosmos DB

Azure Cosmos DB supporta diverse API programmatiche. Queste API sono il più conformi possibile alle API usate da altri database NoSQL comuni. Lo scopo è quello di fornire un semplice percorso di migrazione ad Azure Cosmos DB da questi database, senza che gli sviluppatori debbano apprendere un nuovo paradigma o apportare modifiche significative alle applicazioni. Le API attualmente supportate sono:

  • Core (SQL)
  • MongoDB
  • Cassandra
  • Gremlin (un'API di database a grafo comune)
  • Azure Table Storage

L'API Core (SQL) è una variante del linguaggio SQL in uso nella maggior parte dei sistemi di gestione di database relazionali. Sono previsti adattamenti e restrizioni per la gestione di set di documenti senza schema invece che di tabelle.

Usare Visual Studio Code per gestire Azure Cosmos DB

Quando si usa Visual Studio Code come ambiente di sviluppo, è possibile installare l'estensione Database di Azure per compilare database e applicazioni di Azure Cosmos DB.

Screenshot of the Azure Databases extension in Visual Studio Code marketplace

Questa estensione può essere installata dal Marketplace per le estensioni per Visual Studio Code. Dopo aver installato l'estensione Database, usare Azure explorer, MAIUSC + ALT + A, per usare l'estensione Cosmos DB.

Gestire Cosmos DB da Azure Explorer

L'estensione Database, in Azure Explorer di Visual Studio Code, fornisce un'interfaccia utente grafica integrata con Visual Studio Code. Usando l'estensione, è possibile creare, eliminare e gestire account, database, contenitori e documenti di Azure Cosmos DB.

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the Documents node for a contextual menu to create a new document.

Accedere all'account nel portale

L'estensione consente anche di accedere facilmente a tutte le funzionalità per Cosmos DB, offrendo la possibilità di aprire l'account nel portale di Azure. È possibile accedervi quando si fa clic con il pulsante destro del mouse sull'account e si seleziona Apri nel portale.

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the account node to open account in Azure portal.

Il portale offre l'accesso a tutte le configurazioni per Cosmos DB e al Esplora dati per i database e i contenitori. Usare Esplora dati per inserire, aggiornare, eliminare ed eseguire query sui dati.

Screenshot of the Azure portal with the Data Explorer showing the query window open with a JSON document displayed.