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 las opciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura en los siguientes niveles:
Cliente, que establece el por defecto para todas las ejecuciones de operaciones, a menos que se anule
sesión
transacción
Database
Colección
La lista anterior también indica el orden creciente de precedencia de la configuración de las opciones. Por ejemplo, si estableces un nivel de consistencia de lectura para una transacción, este anulará cualquier nivel de consistencia de lectura configurado para el cliente.
Estas opciones permiten personalizar la coherencia causal y la disponibilidad de los datos en los sets de réplicas.
Nivel de confirmación de escritura
El nivel de confirmación de escritura (write concern) especifica el nivel de reconocimiento solicitado a MongoDB para las operaciones de escritura, como una inserción o actualización, antes de que la operación se devuelva con éxito. Las operaciones que no especifican un nivel de confirmación de escritura (write concern) explícito heredan la configuración global de nivel de confirmación de escritura (write concern) por defecto.
Para más información, consulte nivel de confirmación de escritura (write concern) en el manual de MongoDB Server. Para obtener documentación detallada de la API, consulta la documentación sobre la API de nivel de confirmación de escritura (write concern).
La siguiente tabla describe el write_concern parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| entero o cadena de texto | Solicita el reconocimiento de que la operación de escritura se ha propagado a un número especificado de instancias |
| entero | Especifica un límite de tiempo para evitar que las operaciones de escritura queden bloqueadas indefinidamente. |
| booleano | Solicita el reconocimiento de que la operación de escritura se ha guardado en el diario en disco. |
Ejemplo: establezca el nivel de confirmación de escritura (write concern) para una sola operación de escritura
El siguiente código crea un nuevo documento y especifica la configuración del nivel de confirmación de escritura (write concern) w y wtimeout:
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'myDB') myDB = client.database myCollection = myDB[:myCollection] myCollection.insert_one( { name: 'anotherDocumentName' }, write: { w: 2, wtimeout: 5000 } )
Ejemplo: recuperar y aplicar un nivel de confirmación de escritura (write concern) existente
El siguiente código utiliza el método new_write_concern para construir un write_concern a partir de las opciones de una referencia de base de datos existente, myDB. Luego, el nuevo nivel de confirmación de escritura (write concern) se aplica a un documento insertado.
myDoc = { name: 'New Document' } new_write_concern = Mongo::WriteConcern.get(myDB.write_concern) myDB[:myCollection].with(write: new_write_concern).insert_one(myDoc)
Nota
myDB se puede sustituir por una referencia a cualquier entidad que acepte una opción de nivel de confirmación de escritura (write concern).
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
Puede especificar el ajuste de nivel de consistencia de lectura utilizando el parámetro level. El nivel de consistencia de lectura predeterminado es local. Esto significa que el cliente devuelve los datos del miembro del set de réplicas al que está conectado el cliente, sin garantía de que los datos hayan sido escritos en todos los miembros del set de réplicas.
Nota
Requisitos de nivel de consistencia de lectura más bajos pueden reducir la latencia.
Para obtener más información sobre los niveles de consistencia de lectura o los niveles de consistencia de lectura, consulta Nivel de consistencia de lectura en el manual de MongoDB Server. Para obtener más detalles sobre el read_concern tipo y las definiciones de los niveles de consistencia de lectura, consulte nivel de consistencia de lectura en la documentación de API.
Ejemplo: Establecer el nivel de consistencia de lectura de una agregación
El siguiente código configura el nivel de consistencia de lectura de una agregación a "available":
pipeline = [ { "$match" => { category: 'KITCHENWARE' } }, { "$unset" => ['_id', 'category'] } ] result = myCollection.aggregate(pipeline, read: { read_concern: { level: :available } })
Tip
Para obtener más información sobre las operaciones de agregación, consulte Transforme sus datos con la guía de agregación.
Ejemplo: Cambiar la preocupación de lectura de una base de datos
El siguiente código cambia el nivel de consistencia de lectura de una base de datos a "local":
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'mydb', read_concern: { level: :local }) myDB = client.database
preferencia de lectura
La preferencia de lectura determina de qué nodo de un set de réplicas de MongoDB se realiza una lectura al ejecutar una query.
Para una documentación de la API más detallada, consulta la Documentación de la API de Preferencias de Lectura.
La siguiente tabla muestra las opciones que puede utilizar para personalizar cómo el servidor evalúa a los miembros:
Parameter | Tipo | Descripción |
|---|---|---|
|
| Especifica un requisito o preferencia sobre qué miembro del set de réplicas lee el servidor. El modo predeterminado, |
|
| Asigna etiquetas a los miembros secundarios del conjunto de réplicas para personalizar cómo el servidor los evalúa. Las etiquetas no se pueden usar con la configuración del modo de preferencia de lectura |
|
| Establece varias opciones, incluidas hedge y maxStalenessSeconds que pueden aplicarse a la preferencia de lectura. |
Ejemplo: Establecer preferencias de lectura y preocupaciones para una transacción
El siguiente código configura la preferencia de lectura, el nivel de consistencia de lectura y el nivel de confirmación de escritura (write concern) para las operaciones en una transacción:
transaction_options = { read: { mode: :primary }, read_concern: { level: :local }, write_concern: { w: :majority } } session = client.start_session session.start_transaction(transaction_options) session.commit_transaction # ... rescue => e session.abort_transaction puts "Transaction aborted due to an error: #{e.message}" ensure session.end_session end
Tip
Para obtener más información sobre las transacciones, consulta la guía de Transacciones.
Ejemplo: establecer la Preferencia de Lectura de un Clúster en la Cadena de Conexión
Este ejemplo de código crea un MongoClient que utiliza el modo de preferencia de lectura secondary al realizar consultas en un clúster:
uri = 'mongodb+srv://<user>:<password>@<cluster-url>' options = { read: { mode: :secondary, max_staleness: 120 } } client = Mongo::Client.new(uri, options) myDB = client.database
El ejemplo anterior también establece la maxStalenessSeconds opción 120 en. Para obtener más información sobre las opciones de la cadena de conexión, consulte la sección "Opciones de la cadena de conexión" en el manual de MongoDB Server.
Lecturas y Guardados Reintentarles
El controlador de Ruby reintenta automáticamente ciertas operaciones de lectura y escritura una vez en caso de que fallen debido a un error de red o de servidor.
Puede deshabilitar explícitamente las lecturas o escrituras reintentables modernas configurando las opciones retry_reads o retry_writes en false al crear un nuevo cliente. Si se configura en false, se habilita el comportamiento de reintento heredado.
El siguiente ejemplo desactiva las lecturas y guardados reintentar automáticas modernas para un cliente:
uri = 'mongodb+srv://<user>:<password>@<cluster-url>' options = { retry_reads: false, retry_writes: false } client = Mongo::Client.new(uri, options) myDB = client.database
Para obtener más información sobre las operaciones de lectura repetibles admitidas, consulte Lecturas repetibles en el manual de MongoDB Server. Para obtener más información sobre las operaciones de escritura reintentables admitidas, consulta Escrituras reintentables en el manual del MongoDB Server.
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API: