读取偏好
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());
MongoDatabase
和MongoCollection
实例是不可变的。 在现有MongoDatabase
或MongoCollection
实例上调用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);
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);
更多信息
要学习;了解有关读取偏好(read preference)的更多信息,请参阅MongoDB Server手册中的读取偏好指南。 要学习;了解有关读关注(read concern)的更多信息,请参阅MongoDB Server手册中的读关注指南。