Livelli di coerenza dei dati ottimizzabili in Azure Cosmos DBTunable data consistency levels in Azure Cosmos DB

Azure Cosmos DB è stato progettato da zero pensando alla distribuzione globale di tutti i modelli di dati.Azure Cosmos DB is designed from the ground up with global distribution in mind for every data model. È pensato per offrire garanzie di bassa latenza stimabile e più modelli di coerenza meno rigidi e ben definiti.It is designed to offer predictable low latency guarantees and multiple well-defined relaxed consistency models. Azure Cosmos DB offre attualmente cinque livelli di coerenza: assoluta, decadimento ristretto, sessione, prefisso coerente e finale.Currently, Azure Cosmos DB provides five consistency levels: strong, bounded-staleness, session, consistent prefix, and eventual. I modelli di coerenza con obsolescenza associata, sessione, finale e con prefisso coerente vengono definiti "modelli di coerenza meno rigidi" in quanto forniscono un livello di coerenza inferiore alla coerenza assoluta, ovvero il modello di coerenza massima disponibile.Bounded-staleness, session, consistent prefix, and eventual are referred to as "relaxed consistency models" as they provide less consistency than strong, which is the most highly consistent model available.

Oltre ai modelli di coerenza assoluta e finale offerti in genere dai database distribuiti, Azure Cosmos DB offre altri tre modelli di coerenza attentamente codificati e operativi, ovvero i modelli con obsolescenza associata, sessione e con prefisso coerente.Besides the strong and eventual consistency models commonly offered by distributed databases, Azure Cosmos DB offers three more carefully codified and operationalized consistency models: bounded staleness, session, and consistent prefix. L'utilità di ognuno di questi livelli di coerenza è stata convalidata per casi d'uso reali.The usefulness of each of these consistency levels has been validated against real world use cases. Questi cinque livelli di coerenza, collettivamente, consentono di bilanciare in modo informato coerenza, disponibilità e latenza.Collectively these five consistency levels enable you to make well-reasoned trade-offs between consistency, availability, and latency.

Nel video seguente Andrew Liu, Program Manager di Azure Cosmos DB, illustra le funzionalità di distribuzione globale chiavi in mano.In the following video, Azure Cosmos DB Program Manager Andrew Liu demonstrates the turnkey global distribution features.

Coerenza e database distribuitiDistributed databases and consistency

I database distribuiti a livello commerciale rientrano in due categorie: database che non offrono opzioni di coerenza comprovabili e ben definite e database che offrono due opzioni di programmabilità estreme (coerenza assoluta e coerenza finale).Commercial distributed databases fall into two categories: databases that do not offer well-defined provable consistency choices at all, and databases that offer two extreme programmability choices (strong vs. eventual consistency).

Nel primo caso gli sviluppatori di applicazioni devono preoccuparsi della gestione di aspetti secondari come i protocolli di replica e si trovano a scendere a difficili compromessi tra coerenza, disponibilità, latenza e velocità effettiva.The former burdens application developers with minutia of their replication protocols and expects them to make difficult tradeoffs between consistency, availability, latency, and throughput. Il secondo tipo di database, invece, implica una pressione per la scelta di uno dei due estremi.The latter puts a pressure to choose one of the two extremes. Nonostante il grande numero di ricerche e proposte per oltre 50 modelli di coerenza, la community dei database distribuiti non è riuscita a commercializzare livelli di coerenza che vadano oltre la coerenza assoluta e quella finale.Despite the abundance of research and proposals for more than 50 consistency models, the distributed database community has not been able to commercialize consistency levels beyond strong and eventual consistency. Cosmos DB consente agli sviluppatori di scegliere tra cinque modelli di coerenza ben definiti nell'ambito della coerenza: assoluta, decadimento ristretto, sessione, prefisso coerente e finale.Cosmos DB allows developers to choose between five well-defined consistency models along the consistency spectrum – strong, bounded staleness, session, consistent prefix, and eventual.

Azure Cosmos DB offre numerosi modelli di coerenza, ampi e ben definiti, tra cui scegliere

La tabella seguente illustra le garanzie specifiche fornite da ciascun livello di coerenza.The following table illustrates the specific guarantees each consistency level provides.

Livelli di coerenza e garanzieConsistency Levels and guarantees

Livello di coerenzaConsistency Level GaranzieGuarantees
AssolutaStrong Linearità.Linearizability. Le letture restituiscono sempre la versione più recente di un elemento.Reads are guaranteed to return the most recent version of an item.
Decadimento ristrettoBounded Staleness Prefisso coerente.Consistent Prefix. Ritardo delle letture rispetto alle scritture almeno di prefissi k o intervallo tReads lag behind writes by at most k prefixes or t interval
sessioneSession Prefisso coerente.Consistent Prefix. Letture costanti, scritture costanti, lettura delle proprie scritture, scrittura basata sulle lettureMonotonic reads, monotonic writes, read-your-writes, write-follows-reads
Prefisso coerenteConsistent Prefix Gli aggiornamenti restituiti sono un prefisso di tutti gli aggiornamenti, senza interruzioniUpdates returned are some prefix of all the updates, with no gaps
FinaleEventual Letture non in ordineOut of order reads

È possibile configurare il livello di coerenza predefinito per l'account Cosmos DB (e successivamente ignorare l'impostazione del livello di coerenza per una specifica richiesta di lettura).You can configure the default consistency level on your Cosmos DB account (and later override the consistency on a specific read request). Internamente, il livello di coerenza predefinito si applica ai dati all'interno dei set di partizioni che possono estendersi a più aree.Internally, the default consistency level applies to data within the partition sets, which may span regions. Circa il 73% dei tenant di Azure Cosmos DB usa il livello di coerenza sessione e il 20% il livello decadimento ristretto.About 73% of Azure Cosmos DB tenants use session consistency and 20% prefer bounded staleness. Circa il 3% dei clienti di Azure Cosmos DB sperimenta i vari livelli di coerenza inizialmente prima di decidere quale sia il livello di coerenza specifico più adatto alla propria applicazione.Approximately 3% of Azure Cosmos DB customers experiment with various consistency levels initially before settling on a specific consistency choice for their application. Solo il 2% dei tenant di Azure Cosmos DB eseguono l'override dei livelli di coerenza per ogni richiesta.Only 2% of Azure Cosmos DB tenants override consistency levels on a per request basis.

In Cosmos DB le operazioni di lettura servite con coerenza di sessione, prefisso coerente e finale sono due volte più economici delle operazioni di lettura con coerenza assoluta o decadimento ristretto.In Cosmos DB, reads served at session, consistent prefix and eventual consistency are twice as cheap as reads with strong or bounded staleness consistency. I contratti di servizio di Cosmos DB riguardano complessivamente aziende leader nel settore. Tali contratti includono garanzie di coerenza per quanto riguarda disponibilità, velocità effettiva e latenza.Cosmos DB has industry leading comprehensive SLAs including consistency guarantees along with availability, throughput, and latency. Azure Cosmos DB esegue un controllo della linearità, che usa continuamente i dati di telemetria del servizio e segnala esplicitamente eventuali violazioni della coerenza.Azure Cosmos DB employs a linearizability checker, which continuously operates over the service telemetry and openly reports any consistency violations to you. Per il decadimento ristretto, vengono controllate e segnalate le eventuali violazioni dei limiti k e t.For bounded staleness, Azure Cosmos DB monitors and reports any violations to k and t bounds. Per tutti i cinque livelli di coerenza flessibili, viene segnalata anche la metrica probabilistica di decadimento ristretto direttamente all'utente.For all five relaxed consistency levels, Azure Cosmos DB also reports the probabilistically bounded staleness metric directly to you.

Contratti di servizioService level agreements

Il 99,99% dei contratti di servizio offerto da Azure Cosmos DB garantisce coerenza, disponibilità e latenza per gli account di database Azure Cosmos DB database con ambito in una singola area di Azure configurata in base a uno qualsiasi dei cinque livelli di coerenza oppure per gli account di database che interessano più aree di Azure configurate in base a uno dei quattro livelli di coerenza meno rigidi.Azure Cosmos DB offers comprehensive 99.99% SLAs which guarantee throughput, consistency, availability, and latency for Azure Cosmos DB database accounts scoped to a single Azure region configured with any of the five consistency levels, or database accounts spanning multiple Azure regions, configured with any of the four relaxed consistency levels. Inoltre, indipendentemente dalla scelta del livello di coerenza, Azure Cosmos DB offre un contratto di servizio che garantisce al 99,999% la disponibilità in lettura per gli account di database che si estendono su due o più aree di Azure.Furthermore, independent of the choice of a consistency level, Azure Cosmos DB offers a 99.999% SLA for read availability for database accounts spanning two or more Azure regions.

Ambito di coerenzaScope of consistency

L'ambito di granularità della coerenza è limitato alla richiesta del singolo utente.The granularity of consistency is scoped to a single user request. Una richiesta di scrittura può corrispondere a un'operazione di inserimento, sostituzione, upsert o eliminazione.A write request may correspond to an insert, replace, upsert, or delete transaction. Come per le operazioni di scrittura, anche per una transazione di lettura/query l'ambito equivale alla richiesta del singolo utente.As with writes, a read/query transaction is also scoped to a single user request. Potrebbe essere chiesto all'utente di scorrere le pagine di un ampio set di risultati, che occupa varie partizioni, ma ciascuna transazione di lettura ha come ambito una singola pagina ed è servita dall'interno di una singola partizione.The user may be required to paginate over a large result-set, spanning multiple partitions, but each read transaction is scoped to a single page and served from within a single partition.

Livelli di coerenzaConsistency levels

È possibile configurare un livello di coerenza predefinito per l'account del database che si applica a tutti i contenitori e in tutti i database nel proprio account di Cosmos DB.You can configure a default consistency level on your database account that applies to all containers (and databases) under your Cosmos DB account. Per impostazione predefinita, tutte le operazioni di lettura e le query eseguite sulle risorse definite dall'utente useranno il livello di coerenza predefinito che è stato specificato nell'account del database.By default, all reads and queries issued against the user-defined resources use the default consistency level specified on the database account. È possibile ridurre il livello di coerenza di una richiesta di lettura/query specifica usato in ognuna delle API supportate.You can relax the consistency level of a specific read/query request using in each of the supported APIs. Esistono cinque tipi di livelli di coerenza supportati dal protocollo di replica di Azure Cosmos DB che offrono un chiaro compromesso tra garanzie di coerenza specifiche e prestazioni, come descritto in questa sezione.There are five types of consistency levels supported by the Azure Cosmos DB replication protocol that provide a clear trade-off between specific consistency guarantees and performance, as described in this section.

Assoluta:Strong:

  • la coerenza assoluta offre una garanzia di linearità ovvero la garanzia che le letture restituiscano la versione più recente di un elemento.Strong consistency offers a linearizability guarantee with the reads guaranteed to return the most recent version of an item.
  • la coerenza assoluta garantisce che una scrittura sia visibile solo dopo che ne è stato eseguito il commit in modo permanente dal quorum di maggioranza delle repliche.Strong consistency guarantees that a write is only visible after it is committed durably by the majority quorum of replicas. Una scrittura può ottenere o il commit sincrono e permanente da parte della replica primaria e della maggioranza delle repliche secondarie o l'interruzione.A write is either synchronously committed durably by both the primary and the quorum of secondaries, or it is aborted. Una lettura viene sempre confermata dalla quorum di maggioranza per le letture: un client non potrà mai vedere una scrittura parziale o di cui non sia stato eseguito il commit e leggerà sempre la più recente scrittura confermata.A read is always acknowledged by the majority read quorum, a client can never see an uncommitted or partial write and is always guaranteed to read the latest acknowledged write.
  • Gli account Azure Cosmos DB configurati per usare la coerenza assoluta non possono associare più di un'area di Azure con il loro account Azure Cosmos DB.Azure Cosmos DB accounts that are configured to use strong consistency cannot associate more than one Azure region with their Azure Cosmos DB account.
  • Il costo di un'operazione di lettura (in termini di unità richiesta consumate) con il livello di coerenza assoluta è più alto rispetto ai livelli sessione e finale, ma uguale a quello del livello con decadimento ristretto.The cost of a read operation (in terms of request units consumed) with strong consistency is higher than session and eventual, but the same as bounded staleness.

Decadimento ristretto:Bounded staleness:

  • La coerenza con decadimento ristretto garantisce che il ritardo delle letture sulle scritture sia al massimo pari a K versioni o prefissi di un elemento o all'intervallo di tempo t.Bounded staleness consistency guarantees that the reads may lag behind writes by at most K versions or prefixes of an item or t time-interval.
  • Pertanto, quando si sceglie il decadimento ristretto, il "decadimento" può essere configurato in due modi: numero di versioni K dell'elemento del ritardo delle operazioni di lettura sulle operazioni di scrittura e l'intervallo di tempo tTherefore, when choosing bounded staleness, the "staleness" can be configured in two ways: number of versions K of the item by which the reads lag behind the writes, and the time interval t
  • Il decadimento ristretto offre un ordine globale totale tranne all'interno della "finestra di decadimento".Bounded staleness offers total global order except within the "staleness window." La garanzia di lettura monotona esiste in un'area sia all'interno che all'esterno della "finestra di decadimento".The monotonic read guarantees exist within a region both inside and outside the "staleness window."
  • Il decadimento ristretto offre una maggiore garanzia di coerenza rispetto alla coerenza di sessione, con prefisso coerente o finale.Bounded staleness provides a stronger consistency guarantee than session, consistent-prefix, or eventual consistency. Per le applicazioni distribuite a livello globale, è consigliabile usare il decadimento ristretto per gli scenari in cui si desidera una coerenza assoluta ma si desidera anche il 99,99% di disponibilità e bassa latenza.For globally distributed applications, we recommend you use bounded staleness for scenarios where you would like to have strong consistency but also want 99.99% availability and low latency.
  • Gli account Azure Cosmos DB configurati con la coerenza con decadimento ristretto possono associare qualsiasi numero di aree di Azure con il proprio account Azure Cosmos DB.Azure Cosmos DB accounts that are configured with bounded staleness consistency can associate any number of Azure regions with their Azure Cosmos DB account.
  • Il costo di un'operazione di lettura (in termini di unità richiesta consumate) con il decadimento ristretto è più alto rispetto ai livelli sessione e finale, ma uguale a quello del livello assoluto.The cost of a read operation (in terms of RUs consumed) with bounded staleness is higher than session and eventual consistency, but the same as strong consistency.

Sessione:Session:

  • a differenza dei modelli di coerenza globale offerti dai livelli di coerenza assoluta e con decadimento ristretto, la coerenza di "sessione" ha come ambito una sessione del client.Unlike the global consistency models offered by strong and bounded staleness consistency levels, session consistency is scoped to a client session.
  • La coerenza di sessione è ideale per tutti gli scenari in cui è coinvolto un dispositivo o una sessione utente poiché garantisce letture monotone, scritture monotone e garanzie di lettura di ciò che si scrive (RYW).Session consistency is ideal for all scenarios where a device or user session is involved since it guarantees monotonic reads, monotonic writes, and read your own writes (RYW) guarantees.
  • La coerenza di sessione offre una coerenza prevedibile per una sessione e la massima velocità di scrittura, con latenza minima per scrittura e lettura.Session consistency provides predictable consistency for a session, and maximum read throughput while offering the lowest latency writes and reads.
  • Gli account Azure Cosmos DB configurati con la coerenza sessione possono associare qualsiasi numero di aree di Azure con il proprio account Azure Cosmos DB.Azure Cosmos DB accounts that are configured with session consistency can associate any number of Azure regions with their Azure Cosmos DB account.
  • Il costo di un'operazione di lettura (in termini di unità richiesta consumate) con il livello di coerenza di sessione è minore rispetto ai livelli assoluto e con decadimento ristretto, ma maggiore rispetto al livello finale.The cost of a read operation (in terms of RUs consumed) with session consistency level is less than strong and bounded staleness, but more than eventual consistency.

Prefisso coerente:Consistent Prefix:

  • il prefisso coerente garantisce che, in assenza di altre operazioni di scrittura, alla fine le repliche convergeranno all'interno del gruppo.Consistent prefix guarantees that in absence of any further writes, the replicas within the group eventually converge.
  • Il prefisso coerente garantisce che le operazioni di lettura non vedano mai il fuori sequenza delle operazioni di scrittura.Consistent prefix guarantees that reads never see out of order writes. Se queste sono state eseguite nell'ordine A, B, C, il client vede A, A,B o A,B,C, ma mai il fuori sequenza ad esempio A,C o B,A,C.If writes were performed in the order A, B, C, then a client sees either A, A,B, or A,B,C, but never out of order like A,C or B,A,C.
  • Gli account Azure Cosmos DB configurati con la coerenza con prefisso coerente possono associare qualsiasi numero di aree di Azure con il proprio account Azure Cosmos DB.Azure Cosmos DB accounts that are configured with consistent prefix consistency can associate any number of Azure regions with their Azure Cosmos DB account.

Finale:Eventual:

  • la coerenza finale garantisce che, in assenza di altre scritture, alla fine le repliche all'interno del gruppo convergeranno.Eventual consistency guarantees that in absence of any further writes, the replicas within the group eventually converge.
  • La coerenza finale è la forma più debole di coerenza, in cui un client può ottenere nel tempo valori obsoleti rispetto a quelli già visualizzati in passato.Eventual consistency is the weakest form of consistency where a client may get the values that are older than the ones it had seen before.
  • La coerenza finale rappresenta il livello più debole, ma offre la latenza più bassa sia per le letture sia le per scritture.Eventual consistency provides the weakest read consistency but offers the lowest latency for both reads and writes.
  • Gli account Azure Cosmos DB configurati con la coerenza finale possono associare qualsiasi numero di aree di Azure con il proprio account Azure Cosmos DB.Azure Cosmos DB accounts that are configured with eventual consistency can associate any number of Azure regions with their Azure Cosmos DB account.
  • Il costo di un'operazione di lettura, in termini di unità richieste consumate, con il livello di coerenza finale è il più basso fra tutti i livelli di coerenza di Azure Cosmos DB.The cost of a read operation (in terms of RUs consumed) with the eventual consistency level is the lowest of all the Azure Cosmos DB consistency levels.

Configurazione del livello di coerenza predefinitoConfiguring the default consistency level

  1. Nell'indice del portale di Azure fare clic su Azure Cosmos DB.In the Azure portal, in the Jumpbar, click Azure Cosmos DB.
  2. Nella pagina Azure Cosmos DB selezionare l'account di database da modificare.In the Azure Cosmos DB page, select the database account to modify.
  3. Nella pagina dell'account fare clic su Coerenza predefinita.In the account page, click Default consistency.
  4. Nella pagina Coerenza predefinita selezionare il nuovo livello di coerenza e fare clic su Salva.In the Default Consistency page, select the new consistency level and click Save.

    Schermata con icona Impostazioni e opzione Uniformità predefinita

Livelli di coerenza per le queryConsistency levels for queries

Per impostazione predefinita, per le risorse definite dall'utente, il livello di coerenza per le query è identico a quello delle letture.By default, for user-defined resources, the consistency level for queries is the same as the consistency level for reads. Per impostazione predefinita, l'indice è aggiornato in modo sincrono a ogni inserimento, sostituzione o eliminazione di un elemento nel contenitore di Cosmos DB.By default, the index is updated synchronously on each insert, replace, or delete of an item to the Cosmos DB container. Ciò permette alle query di rispettare lo stesso livello di coerenza delle letture di punti.This enables the queries to honor the same consistency level as that of point reads. Benché Azure Cosmos DB sia ottimizzato per la scrittura e supporti volumi elevati di scritture, la manutenzione sincrona dell'indice e la gestione di query coerenti, è possibile configurare determinati contenitori per l'aggiornamento differito dell'indice.While Azure Cosmos DB is write optimized and supports sustained volumes of writes, synchronous index maintenance and serving consistent queries, you can configure certain containers to update their index lazily. L'indicizzazione differita migliora ulteriormente le prestazioni di scrittura ed è ideale per scenari di inserimento in blocco quando un carico di lavoro presenta principalmente un'intensa attività di lettura.Lazy indexing further boosts the write performance and is ideal for bulk ingestion scenarios when a workload is primarily read-heavy.

Modalità di indicizzazioneIndexing Mode LettureReads QueryQueries
Coerente (impostazione predefinita)Consistent (default) Selezionare tra assoluta, con decadimento ristretto, sessione, prefisso coerente o finaleSelect from strong, bounded staleness, session, consistent prefix, or eventual Selezionare tra assoluta, con decadimento ristretto, sessione o finaleSelect from strong, bounded staleness, session, or eventual
DifferitaLazy Selezionare tra assoluta, con decadimento ristretto, sessione, prefisso coerente o finaleSelect from strong, bounded staleness, session, consistent prefix, or eventual FinaleEventual
NessunaNone Selezionare tra assoluta, con decadimento ristretto, sessione, prefisso coerente o finaleSelect from strong, bounded staleness, session, consistent prefix, or eventual Non applicabileNot applicable

Come per le richieste di lettura, è possibile abbassare il livello di coerenza per una particolare richiesta di query specifica in ogni API.As with read requests, you can lower the consistency level of a specific query request in each API.

Livelli di coerenza per l'API di MongoDBConsistency levels for the MongoDB API

Azure Cosmos DB implementa attualmente la versione 3.4 di MongoDB, che include due impostazioni di coerenza: assoluta e finale.Azure Cosmos DB currently implements MongoDB version 3.4, which has two consistency settings, strong and eventual. Azure Cosmos DB è un'applicazione multi-API e, pertanto, le impostazioni di coerenza sono applicabili a livello di account e l'applicazione della coerenza è controllata da ogni API.Because Azure Cosmos DB is multi-api, the consistency settings are applicable at the account level and enforcement of the consistency is controlled by each API. Fino a MongoDB 3.6 non esisteva il concetto di coerenza della sessione e, se si imposta un account di API MongoDB per l'uso della coerenza di sessione, quando si usano le API di MongoDB viene eseguito il downgrade della coerenza a "finale".Until MongoDB 3.6, there was no concept of a session consistency, so if you set a MongoDB API account to use session consistency, the consistency is downgraded to eventual when using MongoDB APIs. Se è necessaria una garanzia di tipo Read Your Own Write (RYOW) per un account di API MongoDB, il livello di coerenza predefinito per l'account deve essere impostato su "assoluta" o "decadimento ristretto".If you need a read-your-own-write guarantee for a MongoDB API account, the default consistency level for the account should be set to strong or bounded staleness.

Passaggi successiviNext steps

Se si desidera eseguire ulteriori informazioni sui livelli di coerenza e i compromessi, è consigliabile che le risorse seguenti:If you'd like to do more reading about consistency levels and tradeoffs, we recommend the following resources: