Overview
En esta guía, puedes aprender a utilizar las configuraciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura para modificar la forma en que MongoDB ejecuta operaciones de crear, leer, actualizar y borrar (CRUD) en sets de réplicas.
Puedes establecer estas configuraciones en los siguientes niveles:
Cliente, que establece el valor por defecto para todas las ejecuciones de operaciones a menos que se anule
transacción
Database
Colección
Esta lista está en orden ascendente de prioridad. Por ejemplo, si estableces niveles de consistencia de lectura tanto a nivel del cliente como de la base de datos, el nivel de consistencia de lectura especificado a nivel de la base de datos anula el nivel de consistencia de lectura a nivel del cliente.
Nivel de confirmación de escritura
El nivel de confirmación de escritura (write concern) especifica el nivel de reconocimiento solicitado de MongoDB para las operaciones de escritura antes de que la operación se devuelva correctamente. Las operaciones que no especifican un nivel de confirmación de escritura (write concern) explícito heredan la configuración por defecto global de nivel de confirmación de escritura (write concern).
Puedes configurar el nivel de confirmación de escritura (write concern) configurando el WriteConcern opción en un objeto MongoClientSettings, MongoDatabaseSettings o MongoCollectionSettings, o utilizando el método WithWriteConcern() de una instancia de cliente, base de datos o colección.
La opción WriteConcern y el método WithWriteConcern() aceptan una instancia de WriteConcern como parámetro. Se puede especificar el nivel de confirmación de escritura (write concern) utilizando uno de los siguientes valores:
WriteConcern.Acknowledged:La operación de escritura regresa después de que la operación se escribe en la memoria.WriteConcern.W1:La operación de escritura regresa después de que solo el nodo principal reconoce la operación de escritura, sin esperar el reconocimiento de los nodos secundarios.WriteConcern.W2: La operación de escritura se devuelve después de que el nodo principal y al menos un nodo secundario confirmen la operación de escritura.WriteConcern.W3La operación de escritura se completa después de que el nodo principal y al menos dos nodos secundarios confirmen la operación de escritura.WriteConcern.WMajority:La operación de escritura regresa después de que la mayoría de los miembros del conjunto de réplicas reconocen la operación de escritura.WriteConcern.Unacknowledged: La operación de guardar devuelve después de que el nodo primario procese la operación de guardar.
El siguiente ejemplo establece el nivel de confirmación de escritura (write concern) en WriteConcern.WMajority para una instancia de MongoClient:
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>"); mongoClientSettings.WriteConcern = WriteConcern.WMajority; var mongoClient = new MongoClient(mongoClientSettings);
El siguiente ejemplo establece el nivel de confirmación de escritura (write concern) a WriteConcern.WMajority para una colección:
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithWriteConcern(WriteConcern.WMajority);
Nota
Clientes, Colecciones y Bases de Datos son Inmutables
IMongoClient, IMongoDatabase, y IMongoCollection instancias son inmutables. Cuando establezcas el nivel de confirmación de escritura (write concern) en un cliente, base de datos o colección, el método devolverá una nueva instancia con la configuración especificada y no afectará a la instancia original.
Para obtener más información sobre el nivel de confirmación de escritura (write concern), consulte nivel de confirmación de escritura (Write Concern) en el manual del servidor de MongoDB.
readConcern
El nivel de consistencia de lectura especifica los siguientes comportamientos:
Nivel de coherencia causal en todos los sets de réplicas
Garantías de aislamiento mantenidas durante una query
Se puede especificar el nivel de consistencia de lectura configurando la opción ReadConcern en un objeto MongoClientSettings, MongoDatabaseSettings o MongoCollectionSettings, o utilizando el método WithReadConcern() en un cliente, base de datos o colección.
La opción ReadConcern y el método WithReadConcern() aceptan un único parámetro que especifica el nivel de consistencia de lectura.
Puedes establecer los siguientes niveles de consistencia de lectura:
ReadConcern.LocalLa consulta devuelve los datos más recientes de la instancia. No garantiza que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas.ReadConern.AvailableLa consulta devuelve los datos más recientes de la instancia. No garantiza que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas.ReadConcern.Availableno está disponible para sesiones y transacciones causalmente consistentes.ReadConcern.MajorityLa query devuelve datos que han sido reconocidos por la mayoría de los miembros del set de réplicas.ReadConcern.Linearizable: La query devuelve datos que reflejan todas las escrituras exitosas que se completaron antes del inicio de la operación de lectura.ReadConcern.Linearizableno está disponible para su uso con sesiones y transacciones causalmente consistentes.ReadConcern.Snapshot: La query devuelve datos confirmados por mayoría tal como aparecen en las particiones, desde un punto único específico en el pasado reciente.
Para obtener más información sobre los niveles de preocupación de lectura, consulte Niveles de preocupación de lectura en el manual de MongoDB Server.
El siguiente ejemplo establece la preocupación de lectura en ReadConcern.Majority para una instancia de MongoClient:
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>"); mongoClientSettings.ReadConcern = ReadConcern.Majority; var mongoClient = new MongoClient(mongoClientSettings);
El siguiente ejemplo establece el nivel de consistencia de lectura en ReadConcern.Majority para una colección:
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithReadConcern(ReadConcern.Majority);
Para obtener más información sobre el nivel de consistencia de lectura, consulta Nivel de consistencia de lectura en el manual del MongoDB Server.
preferencia de lectura
La preferencia de lectura determina de cuál nodo de un set de réplicas lee MongoDB al ejecutar una query. Puedes establecer la preferencia de lectura configurando la opción ReadPreference en un objeto MongoClientSettings, MongoDatabaseSettings o MongoCollectionSettings, o utilizando el método WithReadPreference() en un cliente, base de datos o colección.
La opción ReadPreference y el método WithReadPreference() aceptan un modo de preferencia de lectura como parámetro. Puedes establecer el modo de preferencia de lectura en uno de los siguientes valores:
ReadPreference.Primary:La consulta devuelve datos del nodo principal.ReadPreference.PrimaryPreferred: La query devuelve datos del nodo primario si está disponible. De lo contrario, la query devuelve datos desde un nodo secundario.ReadPreference.Secondary:La consulta devuelve datos de un nodo secundario.ReadPreference.SecondaryPreferred:La consulta devuelve datos de un nodo secundario si está disponible. De lo contrario, la consulta devuelve datos del nodo principal.ReadPreference.Nearest: La query devuelve datos del nodo con la latencia de red más baja.
El siguiente ejemplo establece la preferencia de lectura en ReadPreference.Secondary para una instancia de MongoClient:
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>"); mongoClientSettings.ReadPreference = ReadPreference.Secondary; var mongoClient = new MongoClient(mongoClientSettings);
El siguiente ejemplo establece la preferencia de lectura en ReadPreference.Secondary para una colección:
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithReadPreference(ReadPreference.Secondary);
Para más información sobre la preferencia de lectura, consulte Preferencia de lectura en el manual de MongoDB Server.
Lecturas y Guardados Reintentarles
El controlador .NET/C# vuelve a intentar automáticamente ciertas operaciones de lectura y escritura una sola vez si fallan debido a un error de red o del servidor.
Puedes desactivar explícitamente las lecturas o escrituras reintentables configurando las opciones RetryReads o RetryWrites en un objeto MongoClientSettings y pasando este objeto al constructor MongoClient. También se pueden establecer las opciones retryReads o retryWrites en una cadena de conexión.
El siguiente ejemplo desactiva las lecturas y escrituras reintentables para un cliente. Elija el MongoClientSettings o la pestaña Connection String para ver el código correspondiente.
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection URI>"); mongoClientSettings.RetryReads = false; mongoClientSettings.RetryWrites = false; var mongoClient = new MongoClient(mongoClientSettings);
var connectionString = "mongodb://localhost:27017/?retryReads=false&retryWrites=false"; var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var mongoClient = new MongoClient(mongoClientSettings);
Para obtener más información sobre las operaciones de lectura y escritura reintentables admitidas, consulta Lecturas reintentables y Escrituras reintentables en el manual del MongoDB Server.
Documentación de la API
Para obtener más información sobre cualquiera de los tipos tratados en esta guía, consulta la siguiente documentación de la API: