Overview
Para elegir de qué nodo de un set de réplicas leer, puede utilizar el driver Java Reactive Streams para configurar su preferencia de lectura. Además, puedes controlar la coherencia y las propiedades de aislamiento de los datos leídos de conjuntos de réplicas y clústeres fragmentados configurando niveles de consistencia de lectura. En esta guía, puedes aprender a usar el MongoDB Java Reactive Streams Driver para configurar las preferencias de lectura y los niveles de consistencia de lectura.
Puedes configurar la preferencia de lectura y el nivel de consistencia de lectura en los siguientes niveles:
Para tu implementación de MongoDB
Para tu base de datos
Para tu colección
Configurar la preferencia de lectura a nivel de implementación
Puedes configurar la preferencia de lectura a nivel de implementación de las siguientes formas:
Al crear un
MongoClientSettingsinstancia, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://host1,host2")) .readPreference(ReadPreference.secondary()) .build()); Mediante la creación de una instancia de
ConnectionString, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readPreference=secondary");
Configura la Preferencia de Lectura a nivel de la Base de Datos o de la Colección
Puede configurar la preferencia de lectura en el nivel de la base de datos o de la colección de las siguientes maneras:
En un
MongoDatabaseutilizando el métodowithReadPreference(), como se muestra en el siguiente código:MongoDatabase database = mongoClient.getDatabase("test") .withReadPreference(ReadPreference.secondary()); En un
MongoCollectionutilizando el métodowithReadPreference(), como se muestra en el siguiente código:MongoCollection<Document> collection = database.getCollection("restaurants") .withReadPreference(ReadPreference.secondary());
MongoDatabase y MongoCollection instancias son inmutables. Llamar a withReadPreference() en una instancia existente de MongoDatabase o MongoCollection devuelve una nueva instancia y no afecta a la instancia en la que se llama al método.
En el siguiente ejemplo, la instancia collectionWithReadPref tiene la preferencia de lectura primaryPreferred, mientras que la preferencia de lectura de collection no se ve afectada:
MongoCollection<Document> collectionWithReadPref = collection.withReadPreference(ReadPreference.primaryPreferred());
Configura el nivel de consistencia de lectura a nivel de implementación.
Puedes configurar el nivel de consistencia de lectura a nivel de implementación de las siguientes maneras:
Mediante la creación de una instancia de
MongoClientSettings, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://host1,host2")) .readConcern(ReadConcern.MAJORITY) .build()); Mediante la creación de una instancia de
ConnectionString, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readConcernLevel=majority");
Configure el nivel de consistencia de lectura a nivel de base de datos o colección
Puedes configurar el nivel de consistencia de lectura tanto a nivel de base de datos como de colección de las siguientes maneras:
En un
MongoDatabaseutilizando el métodowithReadConcern(), como se muestra en el siguiente código:MongoDatabase database = mongoClient.getDatabase("test") .withReadConcern(ReadConcern.MAJORITY); En un
MongoCollectionutilizando el métodowithReadConcern(), como se muestra en el siguiente código:MongoCollection<Document> collection = database.getCollection("restaurants") .withReadConcern(ReadConcern.MAJORITY);
MongoDatabase y MongoCollection instancias son inmutables. Llamar a withReadConcern() en una instancia existente de MongoDatabase o MongoCollection devuelve una nueva instancia y no afecta a la instancia en la que se llama al método.
En el siguiente ejemplo, la collWithReadConcern instancia tiene un AVAILABLE nivel de consistencia de lectura mientras que el nivel de consistencia de lectura de collection no se ve afectado:
MongoCollection<Document> collWithReadConcern = collection.withReadConcern(ReadConcern.AVAILABLE);
Combine nivel de consistencia de lectura, preferencia de lectura y nivel de confirmación de escritura (write concern)
Puedes crear instancias MongoClientSettings, MongoDatabase o MongoCollection para incluir combinaciones de niveles de consistencia de lectura, preferencias de lectura y niveles de confirmación de escritura (write concern).
Por ejemplo, el siguiente código configura los tres a nivel de colección:
collection = database.getCollection("restaurants") .withReadPreference(ReadPreference.primary()) .withReadConcern(ReadConcern.MAJORITY) .withWriteConcern(WriteConcern.MAJORITY);
Información Adicional
Para obtener más información sobre la preferencia de lectura, consulte la Guía de preferencia de lectura en el manual de MongoDB Server. Para obtener más información sobre el nivel de consistencia de lectura, consulta la Guía de nivel de consistencia de lectura en el manual del servidor de MongoDB.