文档菜单
文档首页
/ / /
Java Reactive Streams 驱动程序
/

读取偏好

在本页

  • 概述
  • 在部署级别配置读取偏好
  • 在数据库或集合级别配置读取偏好
  • 在部署级别配置读取关注点
  • 在数据库或集合级别配置读取关注点
  • 组合读取关注点、读取偏好和写入关注点
  • 更多信息

要选择从副本集读取的成员,您可以使用Java Reactive Streams驱动程序来配置读取首选项。您还可以通过配置读取关注点来控制从副本集和分片集群读取的数据的一致性和隔离属性。在本指南中,您可以了解如何使用MongoDB Java Reactive Streams驱动程序来配置读取首选项和读取关注点。

您可以在以下级别配置读取首选项和读取关注点

  • 针对您的MongoDB部署

  • 针对您的数据库

  • 针对您的集合

您可以通过以下方式在部署级别配置读取首选项

  • 通过创建一个MongoClientSettings 实例,如下面的代码所示

    MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder()
    .applyConnectionString(new ConnectionString("mongodb://host1,host2"))
    .readPreference(ReadPreference.secondary())
    .build());
  • 通过创建一个 ConnectionString 实例,如下面的代码所示

    MongoClient mongoClient =
    MongoClients.create("mongodb://host1:27017,host2:27017/?readPreference=secondary");

您可以通过以下方式在数据库或集合级别配置读取首选项:

  • MongoDatabase 中通过使用 withReadPreference() 方法,如下代码所示

    MongoDatabase database = mongoClient.getDatabase("test")
    .withReadPreference(ReadPreference.secondary());
  • MongoCollection 中通过使用 withReadPreference() 方法,如下代码所示

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

MongoDatabaseMongoCollection 实例是不可变的。在现有的 MongoDatabaseMongoCollection 实例上调用 withReadPreference() 将返回一个新的实例,并且不会影响被调用方法的实例。

在以下示例中,collectionWithReadPref 实例的读取首选项为 primaryPreferred,而 collection 的读取首选项不受影响

MongoCollection<Document> collectionWithReadPref = collection.withReadPreference(ReadPreference.primaryPreferred());

您可以通过以下方式在部署级别配置读取关注:

  • 通过创建一个 MongoClientSettings 实例,如下代码所示

    MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder()
    .applyConnectionString(new ConnectionString("mongodb://host1,host2"))
    .readConcern(ReadConcern.MAJORITY)
    .build());
  • 通过创建一个 ConnectionString 实例,如下面的代码所示

    MongoClient mongoClient =
    MongoClients.create("mongodb://host1:27017,host2:27017/?readConcernLevel=majority");

您可以通过以下方式在数据库或集合级别配置读取关注:

  • MongoDatabase 中通过使用 withReadConcern() 方法,如下代码所示

    MongoDatabase database = mongoClient.getDatabase("test")
    .withReadConcern(ReadConcern.MAJORITY);
  • MongoCollection 中通过使用 withReadConcern() 方法,如下代码所示

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

MongoDatabaseMongoCollection 实例是不可变的。在现有的 MongoDatabaseMongoCollection 实例上调用 withReadConcern() 将返回一个新的实例,并且不会影响被调用方法的实例。

以下示例中,collWithReadConcern 实例具有一个 AVAILABLE 读取关注,而 collection 的读取关注不受影响。

MongoCollection<Document> collWithReadConcern =
collection.withReadConcern(ReadConcern.AVAILABLE);

您可以通过构建包含读取关注、读取优先级和写入关注组合的 MongoClientSettingsMongoDatabaseMongoCollection 实例。

例如,以下代码在集合级别设置了所有三个参数

collection = database.getCollection("restaurants")
.withReadPreference(ReadPreference.primary())
.withReadConcern(ReadConcern.MAJORITY)
.withWriteConcern(WriteConcern.MAJORITY);

要了解有关读取优先级的更多信息,请参阅 MongoDB 服务器手册中的读取优先级指南。要了解有关读取关注的信息,请参阅 MongoDB 服务器手册中的 读取关注指南

返回

数据游标