Overview
En esta guía, puede aprender a usar las configuraciones de preocupaciónde escritura,preocupación de lectura y preferencia de lectura para modificar la forma en que MongoDB ejecuta operaciones de creación, lectura, actualización y eliminación (CRUD) en conjuntos de réplicas.
Puede establecer opciones de preocupación de escritura, preocupación de lectura y preferencia de lectura en los siguientes niveles:
Cliente, que establece el valor predeterminado 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 de prioridad creciente de la configuración de las opciones. Por ejemplo, si se establece un nivel de lectura para una transacción, este anulará el nivel de lectura establecido para el cliente.
Estas opciones le permiten personalizar la consistencia causal y la disponibilidad de los datos en sus conjuntos de réplicas.
Nivel de confirmación de escritura
La preocupación de escritura especifica el nivel de confirmación solicitado a MongoDB para operaciones de escritura, como una inserción o una actualización, antes de que la operación se retorne correctamente. Las operaciones que no especifican una preocupación de escritura explícita heredan la configuración global predeterminada de la preocupación de escritura.
Para más información, consulte Escribir preocupación en el manual del servidor MongoDB. Para obtener documentación detallada de la API, consulte la documentación de la API de Escribir preocupación.
La siguiente tabla describe la write_concern parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| entero o cadena de texto | Solicita reconocimiento de que la operación de escritura se ha propagado a una cantidad específica de |
| entero | Especifica un límite de tiempo para evitar que las operaciones de escritura queden bloqueadas indefinidamente. |
| booleano | Solicita reconocimiento de que la operación de escritura se ha escrito en el diario del disco. |
Ejemplo: Establecer la preocupación de escritura para una sola operación de escritura
El siguiente código crea un nuevo documento y especifica las configuraciones de escritura 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 problema de escritura 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. A continuación, la nueva solicitud de escritura 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 reemplazar con una referencia a cualquier entidad que acepte una opción de escritura.
readConcern
La preocupación de lectura especifica los siguientes comportamientos:
Nivel de consistencia causal entre conjuntos de réplicas
Garantías de aislamiento mantenidas durante una consulta
Puede especificar la configuración de la preocupación de lectura mediante el parámetro level. El nivel de preocupación de lectura predeterminado es local. Esto significa que el cliente devuelve los datos del miembro del conjunto de réplicas al que está conectado, sin garantía de que se hayan escrito en todos los miembros del conjunto de réplicas.
Nota
Los requisitos de nivel de lectura más bajos pueden reducir la latencia.
Para obtener más información sobre las preocupaciones de lectura o sus niveles, consulte "Preocupación 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 preocupación de lectura, consulte "Preocupación de lectura" en la documentación de la API.
Ejemplo: Establecer el nivel de preocupación de lectura de una agregación
El siguiente código establece el nivel de preocupación de lectura de una agregación en "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 preocupación 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 qué miembro de un conjunto de réplicas lee MongoDB cuando se ejecuta una consulta.
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 el miembro del conjunto de réplicas del que lee el servidor. El modo predeterminado, |
|
| Asigna etiquetas a los miembros del conjunto de réplicas secundarias para personalizar cómo el servidor las evalúa. No se pueden usar etiquetas con la configuración de modo de preferencia de lectura |
|
| Establece varias opciones, incluidas las de cobertura y maxStalenessSeconds, que se pueden aplicar a sus preferencias de lectura. |
Ejemplo: Establecer preferencias de lectura y preocupaciones para una transacción
El siguiente código establece la preferencia de lectura, la preocupación de lectura y la preocupación de escritura 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
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 escrituras reintentables
El controlador Ruby vuelve a intentar automáticamente ciertas operaciones de lectura y escritura una vez si fallan debido a un error de red o 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 deshabilita las lecturas y escrituras reintentables 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 reintentable compatibles, consulte "Lecturas reintentables" en el manual de MongoDB Server. Para obtener más información sobre las operaciones de escritura reintentable compatibles, consulte "Escrituras reintentables" en el manual de MongoDB Server.
Documentación de la API
Para obtener más información sobre los métodos y tipos mencionados en esta guía, consulte la siguiente documentación de API: