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