配置副本集上的操作
概述
在本指南中,您可以学习如何使用 写关注、读关注 和 读偏好 配置来修改 MongoDB 在副本集上执行创建、读取、更新和删除(CRUD)操作的方式。
您可以在以下级别设置这些配置:
客户端,为所有操作执行设置默认值,除非被覆盖
事务
数据库
集合
此列表按照优先级顺序排列。例如,如果您在客户端和数据库级别都设置了读关注,则数据库级别的读关注将覆盖客户端级别的读关注。
写关注
写关注指定在操作成功返回之前从 MongoDB 获取确认的级别。未指定显式写关注的操作将继承全局默认写关注设置。
您可以通过设置以下选项来设置写关注:WriteConcern
选项在 MongoClientSettings
、MongoDatabaseSettings
或 MongoCollectionSettings
对象上,或使用客户端、数据库或集合实例的 WithWriteConcern()
方法。
WriteConcern
选项和 WithWriteConcern()
方法接受一个 WriteConcern
实例作为参数。您可以通过以下值之一指定写关注:
WriteConcern.Acknowledged
:在操作写入内存后返回。WriteConcern.W1
:在主节点确认写操作后返回,而不等待从节点确认。WriteConcern.W2
:在主节点和至少一个从节点确认写操作后返回。WriteConcern.W3
:写操作在主节点和至少两个二级节点确认写操作后返回。WriteConcern.WMajority
:写操作在副本集多数成员确认写操作后返回。WriteConcern.Unacknowledged
:写操作在主节点处理完写操作后返回。
以下示例将客户端实例的写关注设置为 WriteConcern.WMajority
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection string URI>"); mongoClientSettings.WriteConcern = WriteConcern.WMajority; var mongoClient = new MongoClient(mongoClientSettings);
以下示例将集合的写关注设置为 WriteConcern.WMajority
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithWriteConcern(WriteConcern.WMajority);
注意
客户端、集合和数据库是不可变的
IMongoClient
、IMongoDatabase
和 IMongoCollection
实例是不可变的。当你为一个客户端、数据库或集合设置写关注时,该方法返回一个新的具有指定设置的实例,而不会影响原始实例。
有关写关注的更多信息,请参阅Write Concern MongoDB 服务器手册。
读取关注
读取关注指定以下行为
跨副本集的 因果一致性 级别
您可以通过设置 MongoClientSettings
、MongoDatabaseSettings
或 MongoCollectionSettings
对象上的 ReadConcern
选项,或通过在客户端、数据库或集合上使用 WithReadConcern()
方法来指定读取关注。
ReadConcern
选项和 WithReadConcern()
方法都接受一个参数,用于指定读取关注级别。
您可以设置以下读取关注级别
ReadConcern.Local
:查询返回实例的最新数据。不保证数据已写入副本集多数成员。ReadConern.Available
:查询返回实例的最新数据。不保证数据已写入副本集多数成员。ReadConcern.Available
不可用于因果一致性会话和事务。ReadConcern.Majority
:查询返回已由副本集多数成员确认的数据。ReadConcern.Linearizable
:查询返回反映在读取操作开始之前完成的所有成功写操作的数据。ReadConcern.Linearizable
不可用于因果一致性会话和事务。ReadConcern.Snapshot
:查询返回从最近过去的一个特定时间点开始,在各个分片中显示的大多数已提交数据。
有关读取关注级别的更多信息,请参阅MongoDB服务器手册中的读取关注级别。
以下示例将读取关注设置为ReadConcern.Majority
,用于MongoClient
实例。
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection string URI>"); mongoClientSettings.ReadConcern = ReadConcern.Majority; var mongoClient = new MongoClient(mongoClientSettings);
以下示例将读取关注设置为ReadConcern.Majority
,用于集合。
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithReadConcern(ReadConcern.Majority);
有关读取关注的更多信息,请参阅MongoDB服务器手册中的读取关注。
读取偏好
读取偏好决定了MongoDB在运行查询时从复制集的哪个成员读取。您可以通过在MongoClientSettings
、MongoDatabaseSettings
或MongoCollectionSettings
对象上设置ReadPreference
选项,或通过在客户端、数据库或集合上使用WithReadPreference()
方法来设置读取偏好。
ReadPreference
选项和WithReadPreference()
方法接受一个读取偏好模式作为参数。您可以将读取偏好模式设置为以下值之一
ReadPreference.Primary
:查询从主节点返回数据。ReadPreference.PrimaryPreferred
:如果可用,查询从主节点返回数据。否则,查询从辅助节点返回数据。ReadPreference.Secondary
:查询从辅助节点返回数据。ReadPreference.SecondaryPreferred
:如果可用,查询从辅助节点返回数据,否则从主节点返回数据。ReadPreference.Nearest
:查询从具有最低网络延迟的节点返回数据。
以下示例将读取偏好设置为ReadPreference.Secondary
,用于MongoClient
实例。
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection string URI>"); mongoClientSettings.ReadPreference = ReadPreference.Secondary; var mongoClient = new MongoClient(mongoClientSettings);
以下示例将读取偏好设置为ReadPreference.Secondary
,用于集合。
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithReadPreference(ReadPreference.Secondary);
有关读取偏好的更多信息,请参阅MongoDB服务器手册中的读取偏好。
API 文档
要了解本指南中讨论的任何类型,请参阅以下 API 文档