Docs Menu
Docs Home
/ /

Configurar operaciones en conjuntos de réplicas

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 estas configuraciones en los siguientes niveles:

  1. Cliente, que establece el valor predeterminado para todas las ejecuciones de operaciones a menos que se anule

  2. Transacción

  3. Database

  4. Colección

La lista anterior está en orden de precedencia creciente. Por ejemplo, si se configuran preocupaciones de lectura tanto a nivel de cliente como de base de datos, la preocupación de lectura especificada a nivel de base de datos anula la preocupación de lectura a nivel de cliente.

La preocupación de escritura especifica el nivel de confirmación solicitado a MongoDB para las operaciones de escritura 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 preocupación de escritura.

Puede configurar el problema de escritura mediante el uso de writeConcern() método en un cliente o transacción, o utilizando el método withWriteConcern() en una base de datos o colección.

Los métodos writeConcern() y withWriteConcern() aceptan una instancia WriteConcern como parámetro. Puede especificar el problema de escritura 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 regresa después de que el nodo principal y al menos un nodo secundario reconocen la operación de escritura.

  • WriteConcern.W3:La operación de escritura regresa después de que el nodo principal y al menos dos nodos secundarios reconocen la operación de escritura.

  • WriteConcern.MAJORITY: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 escritura regresa después de que el nodo principal procesa la operación de escritura.

  • WriteConcern.JOURNALED:La operación de escritura regresa después de que el nodo principal escribe los datos en el diario del disco.

El siguiente ejemplo establece la preocupación de escritura en "majority" para una instancia de MongoClient:

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<your connection string>"))
.writeConcern(WriteConcern.MAJORITY)
.build();
MongoClient client = MongoClients.create(settings);

El siguiente ejemplo establece la preocupación de escritura en "majority" para una colección:

MongoCollection<Document> collection = database.getCollection("<collection name>");
collection = collection.withWriteConcern(WriteConcern.MAJORITY);

Nota

Las colecciones y bases de datos son inmutables

MongoDatabase Las instancias MongoCollection son inmutables. Al establecer la preocupación de escritura en una base de datos o colección, el método devuelve una nueva instancia y no afecta a la instancia original.

Para obtener más información sobre la preocupación por la escritura, consulte Escriba Preocupación en el manual del servidor MongoDB.

La lectura de preocupación especifica los siguientes comportamientos:

Puede especificar el nivel de lectura mediante el método readConcern() en un cliente o transacción, o mediante el método withReadConcern() en una base de datos o colección. Los métodos readConcern() y withReadConcern() aceptan un único parámetro que especifica el nivel 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.AVAILABLE no está disponible para sesiones y transacciones causalmente consistentes.

  • ReadConcern.MAJORITY:La consulta devuelve datos que han sido reconocidos por la mayoría de los miembros del conjunto de réplicas.

  • ReadConcern.LINEARIZABLE:La consulta devuelve datos que reflejan todas las escrituras exitosas que se completaron antes del inicio de la operación de lectura. ReadConcern.LINEARIZABLE no está disponible para su uso con sesiones y transacciones causalmente consistentes.

  • ReadConcern.SNAPSHOT:La consulta devuelve datos mayoritariamente confirmados tal como aparecen en los fragmentos, desde un único punto 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:

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<your connection string>"))
.readConcern(ReadConcern.MAJORITY)
.build();
MongoClient client = MongoClients.create(settings);

El siguiente ejemplo establece la preocupación de lectura en ReadConcern.MAJORITY para una colección:

MongoCollection<Document> collection = database.getCollection("<collection name>");
collection = collection.withReadConcern(ReadConcern.MAJORITY);

Para obtener más información sobre la preocupación de lectura, consulte Preocupación de lectura en el manual de MongoDB Server.

La preferencia de lectura determina qué miembro de un conjunto de réplicas lee MongoDB al ejecutar una consulta. Puede configurar la preferencia de lectura mediante el método readPreference() en un cliente o transacción, o mediante el método withReadPreference() en una base de datos o colección.

Los métodos readPreference() y withReadPreference() aceptan un modo de preferencia de lectura como parámetro. Puede 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 consulta devuelve datos del nodo principal si está disponible. De lo contrario, devuelve datos de 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 consulta 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:

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<your connection string>"))
.readPreference(ReadPreference.secondary())
.build();

El siguiente ejemplo establece la preferencia de lectura en ReadPreference.secondary() para una colección:

MongoCollection<Document> collection = database.getCollection("<collection name>");
collection = collection.withReadPreference(ReadPreference.secondary());

Para obtener más información sobre las preferencias de lectura, consulte Preferencias de lectura en el manual de MongoDB Server.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Integrar con Spring Boot

En esta página