Database, contenitori ed elementi in Azure Cosmos DB

SI APPLICA A: Nosql Mongodb Cassandra Gremlin Tabella

Azure Cosmos DB è una piattaforma distribuita come servizio (PaaS) completamente gestita. Per iniziare a usare Azure Cosmos DB, creare un account Azure Cosmos DB in un gruppo di risorse di Azure nella sottoscrizione. Creare quindi database e contenitori all'interno dell'account.

L'account Azure Cosmos DB contiene un nome DNS (Domain Name System) univoco. È possibile gestire il nome DNS usando molti strumenti, tra cui:

  • Azure portal
  • Modelli di Gestione risorse di Azure
  • modelli Bicep
  • Azure PowerShell
  • Interfaccia della riga di comando di Azure
  • SDK di gestione di Azure
  • API REST di Azure

Per replicare i dati e la velocità effettiva in più aree di Azure, è possibile aggiungere e rimuovere aree di Azure all'account in qualsiasi momento. È possibile configurare l'account per avere una singola area o più aree di scrittura. Per altre informazioni, vedere Gestire un account Azure Cosmos DB usando il portale di Azure. È anche possibile configurare il livello di coerenza predefinito in un account.

Elementi in un account Azure Cosmos DB

Attualmente, è possibile creare un massimo di 50 account Azure Cosmos DB in una sottoscrizione di Azure. È possibile aumentare questo limite effettuando una richiesta di supporto.

È possibile gestire una quantità virtualmente illimitata di dati ed effettuare il provisioning della velocità effettiva usando un singolo account Azure Cosmos DB. Per gestire i dati e la velocità effettiva con provisioning, creare uno o più database all'interno dell'account e quindi creare uno o più contenitori per archiviare i dati.

L'immagine seguente mostra la gerarchia degli elementi in un account Azure Cosmos DB.

Diagram of the hierarchy of an Azure Cosmos DB account, including an account, database, and container.

L'immagine seguente mostra la gerarchia delle entità in un account Azure Cosmos DB.

Diagram of the relationship between a container and items, including sibling entities such as stored procedures, user-defined functions, and triggers.

Database di Azure Cosmos DB

In Azure Cosmos DB un database è simile a uno spazio dei nomi. Un database è semplicemente un gruppo di contenitori. La tabella seguente illustra come viene eseguito il mapping di un database a varie entità specifiche dell'API:

Entità di Azure Cosmos DB API per NoSQL API per Apache Cassandra API per MongoDB API per Apache Gremlin API per Table
Database Azure Cosmos DB Database Keyspace Database Database Non applicabile

Nota

Con l'API per gli account tabella, le tabelle in Azure Cosmos DB vengono create a livello di account per mantenere la compatibilità con l'Archiviazione tabelle di Azure.

Contenitore Azure Cosmos DB

Un contenitore di Azure Cosmos DB è la posizione in cui vengono archiviati i dati. A differenza della maggior parte dei database relazionali, che aumentano le dimensioni delle macchine virtuali, Azure Cosmos DB aumenta il numero di istanze.

I dati vengono archiviati in uno o più server denominati partizioni. Per aumentare le partizioni, aumentare la velocità effettiva o aumentare automaticamente man mano che aumentano le risorse di archiviazione. Questa relazione fornisce una quantità virtualmente illimitata di velocità effettiva e archiviazione per un contenitore.

Quando si crea un contenitore, è necessario specificare una chiave di partizione. La chiave di partizione è una proprietà selezionata dagli elementi per consentire ad Azure Cosmos DB di distribuire i dati in modo efficiente tra le partizioni. Azure Cosmos DB usa il valore di questa proprietà per instradare i dati alla partizione appropriata da scrivere, aggiornare o eliminare. È anche possibile usare la chiave di partizione nella WHERE clausola nelle query per un recupero efficiente dei dati.

Il meccanismo di archiviazione sottostante per i dati in Azure Cosmos DB è denominato partizione fisica. Le partizioni fisiche possono avere una velocità effettiva fino a 10.000 unità richiesta al secondo e possono archiviare fino a 50 GB di dati. Azure Cosmos DB astrae questo concetto di partizionamento con una partizione logica, che può archiviare fino a 20 GB di dati.

Le partizioni logiche consentono al servizio di offrire maggiore elasticità e una migliore gestione dei dati nelle partizioni fisiche sottostanti man mano che si aggiungono altre partizioni. Per altre informazioni sul partizionamento e sulle chiavi di partizione, vedere Partizionamento e scalabilità orizzontale in Azure Cosmos DB.

Quando si crea un contenitore, si configura la velocità effettiva in una delle modalità seguenti:

  • Velocità effettiva dedicata: la velocità effettiva in un contenitore è riservata esclusivamente a tale contenitore. Esistono due tipi di velocità effettiva dedicata: standard e scalabilità automatica. Per altre informazioni, vedere Effettuare il provisioning della velocità effettiva standard (manuale) in un contenitore di Azure Cosmos DB.

  • Velocità effettiva condivisa: la velocità effettiva viene specificata a livello di database e quindi condivisa con un massimo di 25 contenitori all'interno del database. La condivisione della velocità effettiva esclude i contenitori configurati con la propria velocità effettiva dedicata.

    La velocità effettiva condivisa può essere un'opzione valida quando tutti i contenitori nel database hanno richieste e risorse di archiviazione simili o quando non sono necessarie prestazioni prevedibili sui dati. Per altre informazioni, vedere Effettuare il provisioning della velocità effettiva standard (manuale) in un database in Azure Cosmos DB.

Nota

Non è possibile passare dalla velocità effettiva dedicata alla velocità effettiva condivisa. I contenitori creati in un database con velocità effettiva condivisa non possono essere aggiornati in modo da avere una velocità effettiva dedicata. Per modificare un contenitore dalla velocità effettiva condivisa a quella dedicata, è necessario creare un nuovo contenitore e copiarvi i dati. La funzionalità di copia del contenitore in Azure Cosmos DB può semplificare questo processo.

I contenitori sono indipendenti dallo schema. Gli elementi all'interno di un contenitore possono avere schemi arbitrari o entità diverse, purché condividono la stessa chiave di partizione. Ad esempio, un contenitore può contenere un elemento o un documento con informazioni sul profilo cliente, insieme a uno o più elementi o documenti che rappresentano tutti gli ordini di vendita del cliente. È possibile inserire informazioni simili per tutti i clienti nello stesso contenitore.

Per impostazione predefinita, tutti i dati aggiunti a un contenitore vengono indicizzati automaticamente senza richiedere l'indicizzazione esplicita. È possibile personalizzare l'indicizzazione per un contenitore configurando i criteri di indicizzazione.

Per evitare di influire sulle prestazioni, è possibile impostare una durata (TTL) per gli elementi selezionati in un contenitore o nell'intero contenitore per eliminare automaticamente tali elementi in background con velocità effettiva inutilizzata. Tuttavia, anche se i dati scaduti non vengono eliminati, non vengono visualizzati in alcuna operazione di lettura. Per altre informazioni, vedere Configurare la durata in Azure Cosmos DB.

Azure Cosmos DB offre una funzionalità predefinita per Change Data Capture denominata feed di modifiche. È possibile usarlo per sottoscrivere tutte le modifiche apportate ai dati all'interno del contenitore.

È possibile registrare stored procedure, trigger, funzioni definite dall'utente e procedure di merge per il contenitore.

Ogni documento all'interno di un contenitore deve avere una id proprietà univoca all'interno del valore della proprietà di una chiave logica per tale contenitore. È possibile usare questa combinazione di proprietà per fornire un vincolo univoco all'interno di un contenitore, senza dover definirne uno in modo esplicito.

È anche possibile specificare un vincolo di chiave univoco nel contenitore di Azure Cosmos DB che usa una o più proprietà. Un vincolo di chiave univoca garantisce l'univocità di uno o più valori per ogni chiave di partizione logica. Se si crea un contenitore usando un criterio di chiave univoca, non è possibile creare elementi nuovi o aggiornati con valori che duplicano i valori specificati dal vincolo di chiave univoca.

Un contenitore è specializzato in entità specifiche dell'API, come illustrato nella tabella seguente:

Entità di Azure Cosmos DB API per NoSQL API per Cassandra API per MongoDB API per Gremlin API per Table
Contenitore di Azure Cosmos DB Contenitore Tabella Raccolta Grafico Tabella

Nota

Assicurarsi di non creare due contenitori con lo stesso nome ma maiuscole/minuscole diverse. Alcune parti della piattaforma Azure non fanno distinzione tra maiuscole e minuscole e questo tipo di denominazione può causare confusione o collisione di dati di diagnostica e azioni sui contenitori.

Proprietà di un contenitore di Azure Cosmos DB

Un contenitore Azure Cosmos DB include un set di proprietà definite dal sistema. A seconda dell'API usata, alcune proprietà potrebbero non essere esposte direttamente. Nella tabella seguente vengono descritte le proprietà definite dal sistema:

Proprietà definita dal sistema Sistema generato o configurabile dall'utente Scopo API per NoSQL API per Cassandra API per MongoDB API per Gremlin API per Table
_rid Generato dal sistema Identificatore univoco di un contenitore. No No No No
_etag Generato dal sistema Tag di entità usato per il controllo della concorrenza ottimistica. No No No No
_ts Generato dal sistema Timestamp dell'ultimo aggiornamento del contenitore. No No No No
_self Generato dal sistema URI indirizzabile del contenitore. No No No No
id Configurabile dall'utente Nome del contenitore.
indexingPolicy Configurabile dall'utente Criteri per la compilazione dell'indice per il contenitore. No
TimeToLive Configurabile dall'utente Eliminazione automatica di un elemento da un contenitore dopo un periodo di tempo impostato. Per informazioni dettagliate, vedere Ora di vita. No No No
changeFeedPolicy Configurabile dall'utente Criteri per la lettura delle modifiche apportate agli elementi in un contenitore. Per informazioni dettagliate, vedere Feed di modifiche. No No No
uniqueKeyPolicy Configurabile dall'utente Criteri per garantire l'univocità di uno o più valori in una partizione logica. Per altre informazioni, vedere Vincoli di chiave univoci. No No No
AnalyticalTimeToLive Configurabile dall'utente Eliminazione automatica di un elemento da un contenitore dopo un periodo di tempo impostato, nel contesto di un archivio analitico. Per informazioni dettagliate, vedere Archivio analitico. No No No

Elementi di Azure Cosmos DB

A seconda dell'API usata, le singole entità di dati possono essere rappresentate in diversi modi:

Entità di Azure Cosmos DB API per NoSQL API per Cassandra API per MongoDB API per Gremlin API per Table
Elemento di Azure Cosmos DB Articolo Riga Documento Nodo o arco Articolo

Proprietà di un elemento

Ogni elemento di Azure Cosmos DB ha le proprietà definite dal sistema seguenti. A seconda dell'API usata, alcune di esse potrebbero non essere esposte direttamente.

Proprietà definita dal sistema Sistema generato o definito dall'utente Scopo API per NoSQL API per Cassandra API di database per MongoDB API per Gremlin API per Table
_rid Generato dal sistema Identificatore univoco dell'elemento No No No No
_etag Generato dal sistema Tag di entità usato per il controllo della concorrenza ottimistica No No No No
_ts Generato dal sistema Timestamp dell'ultimo aggiornamento dell'elemento No No No No
_self Generato dal sistema URI indirizzabile dell'elemento No No No No
id Prima o dopo Nome univoco definito dall'utente in una partizione logica
Proprietà definite dall'utente arbitrarie Definiti dall'utente Proprietà definite dall'utente nella rappresentazione nativa dell'API (inclusi JSON, BSON e CQL)

Nota

L'univocità della id proprietà viene applicata all'interno di ogni partizione logica. Più documenti possono avere lo stesso id valore della proprietà con valori di chiave di partizione diversi.

Operazioni sugli elementi

Gli elementi di Azure Cosmos DB supportano le operazioni seguenti. È possibile usare qualsiasi API di Azure Cosmos DB per eseguire le operazioni.

Operazione API per NoSQL API per Cassandra API per MongoDB API per Gremlin API per Table
Inserire, sostituire, eliminare, upsert, leggere

Passaggi successivi

Informazioni su come gestire l'account Azure Cosmos DB e altri concetti: