Overview
在本指南中,您可以学习;了解如何在Rust驾驶员中配置读取和写入操作。
读取和写入设置
您可以通过设置读取偏好来控制驱动程序路由读取操作的方式。 您还可以通过设置读关注和写关注来控制驱动程序如何等待副本集上读写操作确认的选项。
默认下,数据库从Client 实例继承这些设置,集合从数据库继承这些设置。但是,您可以使用 database_with_options() 或 collection_with_options() 方法为数据库或集合设立自定义读取或写入设置。这些方法使用指定设置创建新的Database 或Collection 实例。
要配置读取或写入设置,请创建 ReadConcern、WriteConcern 或 SelectionCriteria 类型的实例,并将它们传递给选项构建器。
提示
要了解有关读取和写入设置的更多信息,请参阅 MongoDB Server 手册中的以下指南:
以下部分介绍如何在客户端、数据库和集合级别配置读取和写入设置。
客户端配置
此示例演示如何通过将Client 对象传递给ClientOptions Client::with_options() 方法来设立 实例的读取偏好(read preference)、读关注(read concern)和写关注(write concern)。该代码配置以下设置:
Secondary读取偏好(read preference):读取操作从从节点(secondary node from replica set)副本集成员检索数据local读关注(read concern):读取操作返回实例的最新数据,但不保证该数据已写入大多数副本集成员Majority写关注(write concern):所有副本集成员中的大多数必须确认写入操作
let read_preference = ReadPreference::Secondary { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::local(); let write_concern = WriteConcern::builder().w(Acknowledgment::Majority).build(); let client_options = ClientOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let client = Client::with_options(client_options)?;
或者,您可以在连接 URI 中指定读取和写入设置,然后将该 URI 传递给 Client::with_uri_str() 构造函数,如以下示例所示:
let uri = "<connection string>/?readPreference=secondary&readConcernLevel=local&w=majority"; let client = Client::with_uri_str(uri).await?;
数据库配置
此示例演示如何通过将 对象传递给 database_with_options() 方法来设立名为 的数据库的读取偏好(read preference)、读关注(read concern)和写关注(write concern)。该代码配置以下设置:test_databaseDatabaseOptions
PrimaryPreferred读取偏好(read preference):读取操作从主节点 (primary node in the replica set)副本集成员检索数据,如果从节点(secondary node from replica set)主节点 (primary node in the replica set)不可用,则从节点成员检索数据available读关注(read concern):读取操作返回实例的最新数据,但不保证该数据已写入大多数副本集成员majority写关注(write concern):所有副本集成员中的大多数必须确认写入操作
let read_preference = ReadPreference::PrimaryPreferred { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::available(); let write_concern = WriteConcern::majority(); let database_options = DatabaseOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let database = client.database_with_options("test_database", database_options);
集合配置
此示例演示如何通过将test_collection 对象传递给CollectionOptions collection_with_options() 方法来设立名为 的集合的读取偏好(read preference)、读关注(read concern)和写关注(write concern)。该代码配置以下设置:
SecondaryPreferred读取偏好(read preference):读取操作从从节点(secondary node from replica set)副本集成员检索数据,如果没有可用的从节点,则从主节点 (primary node in the replica set)成员检索数据available读关注(read concern):读取操作返回实例的最新数据,但不保证该数据已写入大多数副本集成员w: 0写关注(write concern):客户端不请求确认写入操作
let read_preference = ReadPreference::SecondaryPreferred { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::available(); let write_concern = WriteConcern::builder().w(0.into()).build(); let collection_options = CollectionOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let collection = database.collection_with_options("test_collection", collection_options);
可重试读取和写入
如果某些读取和写入操作由于网络或服务器错误而失败,Rust驾驶员会自动重试一次。
您可以在构建 ClientOptions实例时将 retry_reads 或 retry_writes 选项设置为 false,以显式禁用可重试读取或可重试写入。以下示例为客户端禁用可重试读取和写入:
let client_options = ClientOptions::builder() .retry_reads(false) .retry_writes(false) .build(); let client = Client::with_options(client_options)?;
要学习;了解有关支持的可重试读取操作的更多信息,请参阅MongoDB Server手册中的可重试读取。要学习;了解有关支持的可重试写入操作的更多信息,请参阅MongoDB Server手册中的可重试写入。
排序规则
您可以指定排序规则来修改读取和写入操作的行为。排序规则是一设立特定于语言的字符串比较规则,例如字母大小写和重音符号规则。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: