文档菜单
文档首页
/ / /
C#/.NET
/

配置副本集上的操作

本页内容

  • 概述
  • 写关注
  • 读关注
  • 读偏好
  • API 文档

在本指南中,您可以学习如何使用 写关注读关注读偏好 配置来修改 MongoDB 在副本集上执行创建、读取、更新和删除(CRUD)操作的方式。

您可以在以下级别设置这些配置:

  1. 客户端,为所有操作执行设置默认值,除非被覆盖

  2. 事务

  3. 数据库

  4. 集合

此列表按照优先级顺序排列。例如,如果您在客户端和数据库级别都设置了读关注,则数据库级别的读关注将覆盖客户端级别的读关注。

写关注指定在操作成功返回之前从 MongoDB 获取确认的级别。未指定显式写关注的操作将继承全局默认写关注设置。

您可以通过设置以下选项来设置写关注:WriteConcern 选项在 MongoClientSettingsMongoDatabaseSettingsMongoCollectionSettings 对象上,或使用客户端、数据库或集合实例的 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);

注意

客户端、集合和数据库是不可变的

IMongoClientIMongoDatabaseIMongoCollection 实例是不可变的。当你为一个客户端、数据库或集合设置写关注时,该方法返回一个新的具有指定设置的实例,而不会影响原始实例。

有关写关注的更多信息,请参阅Write Concern MongoDB 服务器手册。

读取关注指定以下行为

您可以通过设置 MongoClientSettingsMongoDatabaseSettingsMongoCollectionSettings 对象上的 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在运行查询时从复制集的哪个成员读取。您可以通过在MongoClientSettingsMongoDatabaseSettingsMongoCollectionSettings对象上设置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 文档

返回

存储大文件