Database, contenitori ed elementi in Azure Cosmos DB
SI APPLICA A: NoSQL MongoDB Cassandra Gremlin Tabella
Azure Cosmos DB è una piattaforma completamente gestita distribuita come servizio (PaaS). Per iniziare a usare Azure Cosmos DB, creare un account Azure Cosmos DB in un gruppo di risorse di Azure nella sottoscrizione. Si creano quindi database e contenitori all'interno dell'account.
L’account Azure Cosmos DB contiene un nome Domain Name System (DNS) univoco. È possibile gestire il nome DNS usando molti strumenti, tra cui:
- Portale di Azure
- 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 tra più aree di Azure, è possibile aggiungere e rimuovere aree di Azure all'account in qualsiasi momento. È possibile configurare l'account in modo da avere una o più aree di scrittura. Per altre informazioni, vedere Gestire un account di Azure Cosmos DB con il portale di Azure. È anche possibile configurare il livello di coerenza predefinito su 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 facendo una richiesta di supporto.
È possibile gestire una quantità virtualmente illimitata di dati e di unità elaborate supportate per il provisioning con un singolo account Azure Cosmos DB. Per gestire i dati e la velocità effettiva con provisioning, creare uno o più database nel proprio 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.
L'immagine seguente mostra la gerarchia di entità in un account di Azure Cosmos DB.
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 il mapping di un database a varie entità specifiche dell'API:
Entità 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, per gestire la compatibilità con Tabelle di Archiviazione di Azure, le tabelle in Azure Cosmos DB vengono create a livello di account.
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 esegue automaticamente il ridimensionamento.
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. È inoltre possibile usare la chiave di partizione nella clausola WHERE
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 vengono aggiunte più partizioni. Per altre informazioni sul partizionamento e sulle chiavi di partizione, vedere Partizionamento o ridimensionamento 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 di un contenitore è riservata esclusivamente per 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) per un contenitore in 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 ed esigenze di archiviazione simili o quando non sono necessarie prestazioni prevedibili sui dati. Per altre informazioni, vedere Effettuare il provisioning della velocità effettiva standard (manuale) per un database in Azure Cosmos DB.
Nota
Non è possibile passare dalla velocità effettiva dedicata a quella condivisa e viceversa. 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é convidano 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 di un contenitore configurandone 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 tali elementi in background con velocità effettiva inutilizzata. Tuttavia, anche se non vengono eliminati, i dati scaduti non vengono visualizzati in alcuna operazione di lettura. Per altre informazioni, vedere Configurazione del tempo di vita 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 (UDF) e le procedure di tipo merge per il contenitore.
Ogni documento all'interno di un contenitore deve avere una proprietà id
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 della chiave univoco nel contenitore di Azure Cosmos DB che usa una o più proprietà. Un vincolo di chiave univoca garantisce che uno o più valori siano univoci per ogni chiave di partizione logica. Se si crea un contenitore usando un criterio di chiave univoca, non è possibile creare elementi nuovi né aggiornarli con valori specificati dal vincolo di chiave univoca.
Un contenitore è specializzato in entità specifiche dell'API come illustrato nella tabella seguente:
Entità Azure Cosmos DB | API per NoSQL | API per Cassandra | API per MongoDB | API per Gremlin | API per Table |
---|---|---|---|---|---|
Contenitore 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ò creare confusione o collisione tra i dati diagnostici e le azioni sui container.
Proprietà di un contenitore Azure Cosmos DB
Un contenitore Azure Cosmos DB dispone di un set di proprietà definite dal sistema. A seconda dell'API usata, alcune proprietà potrebbero non essere esposte direttamente. La tabella seguente illustra le proprietà definite dal sistema:
Proprietà definita dal sistema | Generata dal sistema 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. | Sì | No | No | No | No |
_etag |
Generato dal sistema | Tag di entità usato per il controllo della concorrenza ottimistica. | Sì | No | No | No | No |
_ts |
Generato dal sistema | Ultimo indicatore orario aggiornato del contenitore. | Sì | No | No | No | No |
_self |
Generato dal sistema | URI indirizzabile del contenitore. | Sì | No | No | No | No |
id |
Configurabile dall'utente | Nome del contenitore. | Sì | Sì | Sì | Sì | Sì |
indexingPolicy |
Configurabile dall'utente | Criteri per compilare l'indice per il contenitore. | Sì | No | Sì | Sì | Sì |
TimeToLive |
Configurabile dall'utente | Eliminazione automatica di un elemento da un contenitore dopo un periodo di tempo impostato. Per informazioni dettagliate, vedere Durata. | Sì | No | No | No | Sì |
changeFeedPolicy |
Configurabile dall'utente | Criterio per leggere le modifiche apportate a elementi in un contenitore. Per informazioni dettagliate, vedere Feed di modifiche. | Sì | No | No | No | Sì |
uniqueKeyPolicy |
Configurabile dall'utente | Criterio per garantire l'univocità di uno o più valori all'interno di una partizione logica. Per altre informazioni, vedere Vincoli di chiave univoca. | Sì | No | No | No | Sì |
AnalyticalTimeToLive |
Configurabile dall'utente | Eliminazione automatica di un articolo da un contenitore dopo un periodo di tempo impostato, nel contesto di un archivio analitico. Per informazioni dettagliate, vedere Archivio analitico. | Sì | No | Sì | No | No |
Elementi di Azure Cosmos DB
A seconda dell'API usata, le singole entità di dati possono essere rappresentate in diversi modi:
Entità Azure Cosmos DB | API per NoSQL | API per Cassandra | API per MongoDB | API per Gremlin | API per Table |
---|---|---|---|---|---|
Elemento Azure Cosmos DB | Articolo | Riga | Documento | Nodo o arco | Articolo |
Proprietà di un elemento
Ogni elemento Azure Cosmos DB dispone delle proprietà definite dal sistema seguenti. A seconda dell'API usata, alcune di queste potrebbero non essere esposte direttamente.
Proprietà definita dal sistema | Generata dal sistema o definita dall'utente | Scopo | API per NoSQL | API per Cassandra | API DB per MongoDB | API per Gremlin | API per Table |
---|---|---|---|---|---|---|---|
_rid |
Generato dal sistema | Identificatore univoco dell'elemento | Sì | No | No | No | No |
_etag |
Generato dal sistema | Tag di entità usato per il controllo della concorrenza ottimistica | Sì | No | No | No | No |
_ts |
Generato dal sistema | Indicatore orario dell'ultimo aggiornamento dell'elemento | Sì | No | No | No | No |
_self |
Generato dal sistema | URI indirizzabile dell'elemento | Sì | No | No | No | No |
id |
Prima o dopo | Nome univoco definito dall'utente in una partizione logica | Sì | Sì | Sì | Sì | Sì |
Proprietà definite dall'utente arbitrarie | Definiti dall'utente | Proprietà definite dall'utente nella rappresentazione nativa dell'API (tra cui JSON, BSON e CQL) | Sì | Sì | Sì | Sì | Sì |
Nota
L'univocità della proprietà id
viene applicata all'interno di ogni partizione logica. Più documenti possono avere lo stesso valore proprietà id
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, eseguire l'upsert, leggere | Sì | Sì | Sì | Sì | Sì |