读取偏好
概述
要选择从副本集读取的成员,您可以使用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());
MongoDatabase
和 MongoCollection
实例是不可变的。在现有的 MongoDatabase
或 MongoCollection
实例上调用 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);
MongoDatabase
和 MongoCollection
实例是不可变的。在现有的 MongoDatabase
或 MongoCollection
实例上调用 withReadConcern()
将返回一个新的实例,并且不会影响被调用方法的实例。
以下示例中,collWithReadConcern
实例具有一个 AVAILABLE
读取关注,而 collection
的读取关注不受影响。
MongoCollection<Document> collWithReadConcern = collection.withReadConcern(ReadConcern.AVAILABLE);
组合读取关注、读取优先级和写入关注
您可以通过构建包含读取关注、读取优先级和写入关注组合的 MongoClientSettings
、MongoDatabase
或 MongoCollection
实例。
例如,以下代码在集合级别设置了所有三个参数
collection = database.getCollection("restaurants") .withReadPreference(ReadPreference.primary()) .withReadConcern(ReadConcern.MAJORITY) .withWriteConcern(WriteConcern.MAJORITY);
更多信息
要了解有关读取优先级的更多信息,请参阅 MongoDB 服务器手册中的读取优先级指南。要了解有关读取关注的信息,请参阅 MongoDB 服务器手册中的 读取关注指南。