Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序
/

读取偏好

在此页面上

  • Overview
  • 在部署级别配置读取偏好
  • 在数据库或集合级别配置读取偏好
  • 在部署级别配置读关注
  • 在数据库或集合级别配置读关注
  • 结合读关注、读取偏好和写关注
  • 更多信息

要选择从副本集的哪个节点读取,可以使用Java Reactive Streams驾驶员来配置读取偏好。 此外,您还可以通过配置读关注来控制从副本集和分片的集群读取的数据的一致性和隔离性性。 在本指南中,您可以学习;了解如何使用MongoDB Java Reactive Streams 驱动程序来配置读取偏好和读取关注。

您可以在以下级别配置读取偏好(read preference)和读关注(read concern):

  • 对于MongoDB 部署

  • 对于您的数据库

  • 供您集合

您可以通过以下方式在部署级别配置读取偏好(read preference):

  • 通过创建一个 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");

您可以通过以下方式在数据库或集合级别配置读取偏好(read preference):

  • 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实例的读取偏好(read preference)为primaryPreferred ,而collection的读取偏好(read preference)不受影响:

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

您可以通过以下方式在部署级别配置读关注(read concern):

  • 通过创建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");

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

  • 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);

要学习;了解有关读取偏好(read preference)的更多信息,请参阅MongoDB Server手册中的读取偏好指南。 要学习;了解有关读关注(read concern)的更多信息,请参阅MongoDB Server手册中的读关注指南

后退

数据游标