Niveles de coherencia de datos optimizables en Azure Cosmos DBTunable data consistency levels in Azure Cosmos DB

El diseño de Azure Cosmos DB se llevó a cabo desde el principio pensando en la distribución global de cada modelo de datos.Azure Cosmos DB is designed from the ground up with global distribution in mind for every data model. Se ha diseñado para que ofrezca garantías de una baja latencia predecible y varios modelos de coherencia moderada bien definidos.It is designed to offer predictable low latency guarantees and multiple well-defined relaxed consistency models. Actualmente, Azure Cosmos DB ofrece cinco niveles de coherencia: fuerte, de obsolescencia limitada, de sesión, de prefijo coherente y final.Currently, Azure Cosmos DB provides five consistency levels: strong, bounded-staleness, session, consistent prefix, and eventual. Obsolescencia limitada, sesión, prefijo coherente y posible se denominan "modelos de coherencia moderada", ya que proporcionan menos coherencia que la coherencia fuerte, que es el modelo más coherente disponible.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.

Además de los modelos de coherencia fuerte y final que proporcionan habitualmente las bases de datos distribuidas, Azure Cosmos DB ofrece tres modelos de coherencia codificados y operacionalizados de forma cuidadosa: obsolescencia limitada, sesión y prefijo coherente.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. La utilidad de cada uno de estos niveles de coherencia se ha validado con casos de uso reales.The usefulness of each of these consistency levels has been validated against real world use cases. De forma colectiva, estos cinco niveles de coherencia permiten lograr equilibrios bien razonados entre la coherencia, la disponibilidad y la latencia.Collectively these five consistency levels enable you to make well-reasoned trade-offs between consistency, availability, and latency.

En el siguiente vídeo, Andrew Liu, administrador de programas de Azure Cosmos DB, muestra las características de distribución global inmediata.In the following video, Azure Cosmos DB Program Manager Andrew Liu demonstrates the turnkey global distribution features.

Coherencia y bases de datos distribuidasDistributed databases and consistency

Las bases de datos distribuidas comerciales se dividen en dos categorías: las bases de datos que no ofrecen opciones de coherencia bien definida en absoluto y las que ofrecen dos opciones de programación opuestas (coherencia fuerte y final).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).

La primera supone una carga de detalles pormenorizados de los protocolos de replicación para los desarrolladores de aplicaciones y espera de ellos difíciles compensaciones entre coherencia, disponibilidad, latencia y rendimiento.The former burdens application developers with minutia of their replication protocols and expects them to make difficult tradeoffs between consistency, availability, latency, and throughput. La última obliga a elegir uno de los dos extremos.The latter puts a pressure to choose one of the two extremes. A pesar de la gran cantidad de investigación y propuestas de más de 50 modelos de coherencia, la comunidad de bases de datos distribuidas no ha sido capaz de comercializar otros niveles de coherencia distintos del alto y el final.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 permite a los desarrolladores elegir entre cinco modelos de coherencia bien definidos dentro del espectro de coherencia: alta, de obsolescencia limitada, de sesión, de prefijo coherente y final.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 ofrece varios modelos de coherencia bien definida (progresivos) entre los que elegir

En la tabla siguiente se muestran las garantías específicas que ofrece cada nivel de coherencia.The following table illustrates the specific guarantees each consistency level provides.

Niveles de coherencia y garantíasConsistency Levels and guarantees

Nivel de coherenciaConsistency Level GarantíasGuarantees
AltaStrong Linealidad.Linearizability. Se garantiza que las lecturas devolverán la versión más reciente de un elemento.Reads are guaranteed to return the most recent version of an item.
De obsolescencia entrelazadaBounded Staleness Prefijo coherente.Consistent Prefix. Los mayoría de los prefijos k y los intervalos t retrasan las lecturas tras las escriturasReads lag behind writes by at most k prefixes or t interval
SesiónSession Prefijo coherente.Consistent Prefix. Lecturas monótonas, escrituras monótonas, lectura de la escritura, escritura tras las lecturasMonotonic reads, monotonic writes, read-your-writes, write-follows-reads
De prefijo coherenteConsistent Prefix Las actualizaciones devueltas son prefijos de todas las actualizaciones, sin espaciosUpdates returned are some prefix of all the updates, with no gaps
OcasionalEventual Lecturas sin ordenOut of order reads

Puede establecer la coherencia predeterminada en la cuenta de Cosmos DB (y después reemplazar la para una solicitud de lectura concreta).You can configure the default consistency level on your Cosmos DB account (and later override the consistency on a specific read request). Internamente, el nivel de coherencia predeterminado se aplica a los datos de los conjuntos de particiones, que pueden abarcar regiones.Internally, the default consistency level applies to data within the partition sets, which may span regions. Aproximadamente un 73 % de los inquilinos de Azure Cosmos DB usan la coherencia de sesión y un 20 % prefiere la obsolescencia limitada.About 73% of Azure Cosmos DB tenants use session consistency and 20% prefer bounded staleness. Aproximadamente el 3 % de los clientes de Azure Cosmos DB experimentan con distintos niveles de coherencia inicialmente antes de fijar una opción de coherencia específica para su aplicación.Approximately 3% of Azure Cosmos DB customers experiment with various consistency levels initially before settling on a specific consistency choice for their application. Solo un 2 % de los inquilinos de Azure Cosmos DB reemplazan los niveles de coherencia por solicitud.Only 2% of Azure Cosmos DB tenants override consistency levels on a per request basis.

En Cosmos DB, las lecturas de coherencia de sesión, prefijo coherente y final son el doble de económicas que las de coherencia fuerte o de obsolescencia limitada.In Cosmos DB, reads served at session, consistent prefix and eventual consistency are twice as cheap as reads with strong or bounded staleness consistency. Cosmos DB presenta unos Acuerdos de Nivel de Servicio líderes del sector completos, que incluyen garantías de coherencia, además de disponibilidad, rendimiento y latencia.Cosmos DB has industry leading comprehensive SLAs including consistency guarantees along with availability, throughput, and latency. Azure Cosmos DB emplea un comprobador de linealidad, que funciona continuamente sobre la telemetría de servicio y le notifica abiertamente las infracciones de coherencia.Azure Cosmos DB employs a linearizability checker, which continuously operates over the service telemetry and openly reports any consistency violations to you. Para la obsolescencia limitada, Azure Cosmos DB supervisa y notifica las infracciones de los límites de k y t.For bounded staleness, Azure Cosmos DB monitors and reports any violations to k and t bounds. Para los cinco niveles de coherencia moderada, Azure Cosmos DB también le notifica directamente la métrica de obsolescencia limitada probabilística.For all five relaxed consistency levels, Azure Cosmos DB also reports the probabilistically bounded staleness metric directly to you.

Contratos de nivel de servicioService level agreements

Azure Cosmos DB ofrece Acuerdos de Nivel de Servicio completos del 99,99 % que garantizan el rendimiento, la coherencia, la disponibilidad y la latencia de las cuentas de base de datos de Azure Cosmos DB en el ámbito de una sola región de Azure configurada con alguno de los cinco niveles de coherencia, o cuentas de base de datos que abarcan varias regiones de Azure, configuradas con alguno de los cuatro niveles de coherencia moderada.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. Además, independientemente de la elección del nivel de coherencia, Azure Cosmos DB ofrece un Acuerdo del Nivel de Servicio del 99,999 % para la disponibilidad de lectura para cuentas de base de datos que abarcan dos o más regiones de 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.

Ámbito de coherenciaScope of consistency

El ámbito de la granularidad de coherencia se limita a una única solicitud de usuario.The granularity of consistency is scoped to a single user request. Una solicitud de escritura puede corresponder a una transacción de inserción, reemplazo, upsert o eliminación.A write request may correspond to an insert, replace, upsert, or delete transaction. Al igual que con las escrituras, el ámbito de una transacción de lectura o consulta también se limita a una única solicitud de usuario.As with writes, a read/query transaction is also scoped to a single user request. Es posible que el usuario deba paginar un conjunto grande de resultados, que abarque varias particiones, pero el ámbito de cada transacción de lectura se restringe a una sola página y se atiende desde dentro de una sola partición.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.

Niveles de coherenciaConsistency levels

Puede configurar el nivel de coherencia predeterminado en la cuenta de la base de datos que se aplica a todas las colecciones (y bases de datos) de su cuenta de Cosmos DB.You can configure a default consistency level on your database account that applies to all collections (and databases) under your Cosmos DB account. De manera predeterminada, todas las lecturas y consultas enviadas a los recursos definidos por el usuario usan el nivel de coherencia predeterminado especificado en la cuenta de la base de datos.By default, all reads and queries issued against the user-defined resources use the default consistency level specified on the database account. Puede relajar el nivel de coherencia de una solicitud de lectura o consulta específica que se usa en cada una de las API admitidas.You can relax the consistency level of a specific read/query request using in each of the supported APIs. Existen cinco tipos de niveles de coherencia admitidos por el protocolo de replicación de Azure Cosmos DB que proporcionan un equilibrio claro entre las garantías de coherencia específicas y el rendimiento, como se describe en esta sección.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.

Fuerte:Strong:

  • La coherencia fuerte ofrece una garantía de linealidad que asegura que las lecturas devuelvan la versión más reciente de un elemento.Strong consistency offers a linearizability guarantee with the reads guaranteed to return the most recent version of an item.
  • la coherencia alta garantiza que una escritura solo es visible después de confirmarse de forma duradera por la mayoría del cuórum de réplicas.Strong consistency guarantees that a write is only visible after it is committed durably by the majority quorum of replicas. Una escritura se confirma sincrónicamente de forma duradera tanto por la réplica principal como por el cuórum de las secundarias, o se anula.A write is either synchronously committed durably by both the primary and the quorum of secondaries, or it is aborted. Una lectura siempre se confirma por la mayoría del cuórum de lectura; un cliente no puede ver nunca una escritura no confirmada o parcial y cuenta con la garantía de que leerá la última escritura confirmada.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.
  • Las cuentas de Azure Cosmos DB configuradas para usar la coherencia fuerte no pueden asociar más de una región de Azure a su cuenta de 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.
  • El costo de una operación de lectura (en términos de unidades de solicitud consumidas) con coherencia fuerte es mayor que con la de sesión o la eventual, pero igual que con la de obsolescencia entrelazada.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.

Obsolescencia limitada:Bounded staleness:

  • La coherencia de obsolescencia limitada garantiza que las lecturas puedan ir con retraso respecto a las escrituras en un máximo de versiones K o prefijos de un elemento o el intervalo de tiempo 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.
  • Por lo tanto, si elige la obsolescencia limitada, la "obsolescencia" puede configurarse de dos maneras: por el número de versiones K del elemento por el que las lecturas van detrás de las escrituras y por el intervalo de tiempo t.Therefore, 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
  • La obsolescencia limitada ofrece un orden global total, excepto dentro de la "ventana de obsolescencia".Bounded staleness offers total global order except within the "staleness window." La garantía de lectura monotónica existe dentro de una región, tanto dentro como fuera de la "ventana de obsolescencia".The monotonic read guarantees exist within a region both inside and outside the "staleness window."
  • La obsolescencia limitada proporciona una garantía de coherencia más fuerte que la coherencia de sesión, la de prefijo coherente o la final.Bounded staleness provides a stronger consistency guarantee than session, consistent-prefix, or eventual consistency. Para las aplicaciones de distribución global, se recomienda utilizar la obsolescencia entrelazada para aquellos escenarios donde se desea disponer de coherencia fuerte pero también de una disponibilidad del 99,99 % y una latencia baja.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.
  • Las cuentas de Azure Cosmos DB que están configuradas con la coherencia de obsolescencia limitada pueden asociar cualquier número de regiones de Azure a su cuenta de 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.
  • El costo de una operación de lectura (en términos de unidades de solicitud consumidas) con uso vinculado es mayor que con la de sesión o la eventual, pero igual que con la de coherencia fuerte.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.

Sesión:Session:

  • A diferencia de los modelos de coherencia global ofrecidos por los niveles de coherencia fuerte y de obsolescencia entrelazada, el ámbito de la coherencia de sesión corresponde a una sesión de cliente.Unlike the global consistency models offered by strong and bounded staleness consistency levels, session consistency is scoped to a client session.
  • La coherencia de sesión es ideal para todos los escenarios en los que exista una sesión de usuario o dispositivo, ya que garantiza lecturas monotónicas, escrituras monotónicas y lectura de sus propias escrituras (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 coherencia de sesión proporciona una coherencia predecible para una sesión, así como de un rendimiento de lectura máximo, al mismo tiempo que ofrece las escrituras y lecturas con menor latencia.Session consistency provides predictable consistency for a session, and maximum read throughput while offering the lowest latency writes and reads.
  • Las cuentas de Azure Cosmos DB que están configuradas con la coherencia de sesión pueden asociar cualquier número de regiones de Azure a su cuenta de 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.
  • El costo de una operación de lectura (en términos de unidades de solicitud consumidas) con el nivel de coherencia de sesión es menor que con la fuerte o la de obsolescencia limitada, pero mayor que con la final.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.

De prefijo coherente:Consistent Prefix:

  • La coherencia de prefijo coherente garantiza que, en ausencia de escrituras adicionales, las réplicas dentro del grupo terminarán por converger.Consistent prefix guarantees that in absence of any further writes, the replicas within the group eventually converge.
  • El prefijo coherente garantiza que las lecturas nunca vean escrituras desordenadas.Consistent prefix guarantees that reads never see out of order writes. Si se realizan escrituras en el orden A, B, C, un cliente ve A, A,B o A,B,C, pero nunca un desorden como 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.
  • Las cuentas de Azure Cosmos DB que están configuradas con la coherencia de prefijo coherente pueden asociar cualquier número de regiones de Azure a su cuenta de 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.

Final:Eventual:

  • La coherencia final garantiza que, en ausencia de escrituras adicionales, las réplicas dentro del grupo terminarán por converger.Eventual consistency guarantees that in absence of any further writes, the replicas within the group eventually converge.
  • La coherencia eventual es la forma más débil de coherencia, ya que un cliente puede obtener los valores que son más antiguos que los que ha visto antes.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 coherencia ocasional proporciona la coherencia de lectura más débil, pero ofrece la latencia más baja tanto para lecturas como para escrituras.Eventual consistency provides the weakest read consistency but offers the lowest latency for both reads and writes.
  • Las cuentas de Azure Cosmos DB que están configuradas con la coherencia final pueden asociar cualquier número de regiones de Azure a su cuenta de 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.
  • El costo de una operación de lectura (en términos de unidades de solicitud consumidas) con el nivel de coherencia final es el más bajo de entre todos los niveles de coherencia de 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.

Configuración del nivel de coherencia predeterminadoConfiguring the default consistency level

  1. En la barra de accesos de Azure Portal, haga clic en Azure Cosmos DB.In the Azure portal, in the Jumpbar, click Azure Cosmos DB.
  2. En la página Azure Cosmos DB, seleccione la cuenta de base de datos que quiere modificar.In the Azure Cosmos DB page, select the database account to modify.
  3. En la página Cuenta, haga clic en Coherencia predeterminada.In the account page, click Default consistency.
  4. En la página Coherencia predeterminada, seleccione el nuevo nivel de coherencia y haga clic en Guardar.In the Default Consistency page, select the new consistency level and click Save.

    Captura de pantalla que muestra el icono Configuración y la entrada Coherencia predeterminada

Niveles de coherencia para consultasConsistency levels for queries

De manera predeterminada, para los recursos definidos por el usuario, el nivel de coherencia de las consultas es igual que el de las lecturas.By default, for user-defined resources, the consistency level for queries is the same as the consistency level for reads. De forma predeterminada, el índice se actualiza de forma sincrónica con cada inserción, reemplazo o eliminación de un elemento en el contenedor de Cosmos DB.By default, the index is updated synchronously on each insert, replace, or delete of an item to the Cosmos DB container. Esto permite a las consultas respetar el mismo nivel de coherencia que el de las lecturas puntuales.This enables the queries to honor the same consistency level as that of point reads. Aunque Azure Cosmos DB está optimizado para escrituras y admite volúmenes sostenidos de escrituras, un mantenimiento sincrónico de índices y un servicio de consultas coherentes, se pueden configurar determinadas colecciones para actualizar el índice de manera diferida.While Azure Cosmos DB is write optimized and supports sustained volumes of writes, synchronous index maintenance and serving consistent queries, you can configure certain collections to update their index lazily. La indización diferida incrementa aún más el rendimiento de las escrituras y es ideal para aquellos escenarios de ingesta en bloque en donde la carga de trabajo sea sobre todo de lecturas.Lazy indexing further boosts the write performance and is ideal for bulk ingestion scenarios when a workload is primarily read-heavy.

Modo de indexaciónIndexing Mode LecturasReads ConsultasQueries
Coherente (predeterminado)Consistent (default) Seleccionar entre fuerte, de obsolescencia limitada, de sesión, de prefijo coherente o finalSelect from strong, bounded staleness, session, consistent prefix, or eventual Seleccionar entre fuerte, de obsolescencia entrelazada, de sesión y eventualSelect from strong, bounded staleness, session, or eventual
DiferidaLazy Seleccionar entre fuerte, de obsolescencia limitada, de sesión, de prefijo coherente o finalSelect from strong, bounded staleness, session, consistent prefix, or eventual OcasionalEventual
NoneNone Seleccionar entre fuerte, de obsolescencia limitada, de sesión, de prefijo coherente o finalSelect from strong, bounded staleness, session, consistent prefix, or eventual No aplicableNot applicable

Al igual que con las solicitudes de lectura, puede disminuir el nivel de coherencia de una solicitud de consulta concreta en cada API.As with read requests, you can lower the consistency level of a specific query request in each API.

Niveles de coherencia de la API de MongoDBConsistency levels for the MongoDB API

Azure Cosmos DB implementa actualmente la versión 3.4 de MongoDB, que tiene dos opciones de configuración de coherencia: fuerte y eventual.Azure Cosmos DB currently implements MongoDB version 3.4, which has two consistency settings, strong and eventual. Como Azure Cosmos DB tiene varias API, la configuración de coherencia se puede aplicar en el nivel de cuenta y cada una de las API controla el cumplimiento de la coherencia.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. Hasta MongoDB 3.6, no había ningún concepto de una coherencia de sesión, por lo que si establece una cuenta de API de MongoDB para usar coherencia de sesión, la coherencia cambia a eventual al usar las API de MongoDB.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. Si necesita una garantía de lectura de lo que ha escrito para una cuenta de API de MongoDB, el nivel de coherencia predeterminado para la cuenta se debe establecer en fuerte u obsolescencia limitada.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.

Pasos siguientesNext steps

Si desea leer más sobre los niveles de coherencia y los compromisos, recomendamos los siguientes recursos:If you'd like to do more reading about consistency levels and tradeoffs, we recommend the following resources: