Overview
Para elegir qué miembro de un conjunto de réplicas leer, puede usar el controlador Java Reactive Streams para configurar las preferencias de lectura. Además, puede controlar la consistencia y el aislamiento de los datos leídos desde conjuntos de réplicas y clústeres fragmentados configurando las preocupaciones de lectura. En esta guía, aprenderá a usar el controlador Java Reactive Streams de MongoDB para configurar las preferencias de lectura y las preocupaciones de lectura.
Puede configurar la preferencia de lectura y la preocupación por la lectura en los siguientes niveles:
Para su implementación de MongoDB
Para su base de datos
Para tu colección
Configurar la preferencia de lectura a nivel de implementación
Puede configurar la preferencia de lectura en el nivel de implementación de las siguientes maneras:
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()); Creando una instancia
ConnectionString, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readPreference=secondary");
Configurar la preferencia de lectura en el nivel de base de datos o colección
Puede configurar la preferencia de lectura a nivel de base de datos o de 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 Las instancias MongoCollection y withReadPreference() son inmutables. Llamar a en una instancia MongoDatabase o MongoCollection existente devuelve una nueva instancia y no afecta a la instancia en la que se llama el método.
En el siguiente ejemplo, la instancia collectionWithReadPref tiene la preferencia de lectura de primaryPreferred mientras que la preferencia de lectura de collection no se ve afectada:
MongoCollection<Document> collectionWithReadPref = collection.withReadPreference(ReadPreference.primaryPreferred());
Configurar la preocupación de lectura en el nivel de implementación
Puede configurar la preocupación de lectura en el nivel de implementación de las siguientes maneras:
Creando una instancia
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()); Creando una instancia
ConnectionString, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readConcernLevel=majority");
Configurar la preocupación de lectura en el nivel de base de datos o colección
Puede configurar la preocupación de lectura a nivel de base de datos o 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 Las instancias MongoCollection y withReadConcern() son inmutables. Llamar a en una instancia MongoDatabase o MongoCollection existente devuelve una nueva instancia y no afecta a la instancia en la que se llama el método.
En el siguiente ejemplo, la instancia collWithReadConcern tiene una preocupación de lectura AVAILABLE mientras que la preocupación de lectura de collection no se ve afectada:
MongoCollection<Document> collWithReadConcern = collection.withReadConcern(ReadConcern.AVAILABLE);
Combine la preocupación por la lectura, la preferencia por la lectura y la preocupación por la escritura
Puede crear instancias MongoClientSettings, MongoDatabase o MongoCollection para incluir combinaciones de inquietudes de lectura, preferencias de lectura e inquietudes de escritura.
Por ejemplo, el siguiente código establece los tres en el 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 las preferencias de lectura, consulte la Lea la guía de preferencias en el manual de MongoDB Server. Para obtener más información sobre la preocupación de lectura, consulte la guía de preocupación de lectura en el manual de MongoDB Server.