文档菜单
文档首页
/ / /
Java反应式流驱动程序

配置副本集上的操作

本页内容

  • 概述
  • 写入关注点
  • 读取关注点
  • 读取优先级
  • API 文档

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

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

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

  2. 事务

  3. 数据库

  4. 集合

上述列表按照优先级递增。例如,如果您在客户端和数据库级别都设置了读取关注,则数据库级别的读取关注将覆盖客户端级别的读取关注。

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

您可以通过以下方式设置写入关注writeConcern() 方法在客户端或事务上,或使用 withWriteConcern() 方法在数据库或集合上。

writeConcern()withWriteConcern() 方法接受一个 WriteConcern 实例作为参数。您可以使用以下值之一来指定写入关注

  • WriteConcern.ACKNOWLEDGED:写入操作在操作写入内存后返回。

  • WriteConcern.W1:写入操作仅在主节点确认写入操作后返回,而不等待从节点确认。

  • WriteConcern.W2:写入操作在主节点和至少一个从节点确认写入操作后返回。

  • WriteConcern.W3:写入操作在主节点和至少两个副节点确认写入操作后返回。

  • WriteConcern.MAJORITY:写入操作在副本集多数成员确认写入操作后返回。

  • WriteConcern.UNACKNOWLEDGED:写入操作在主节点处理写入操作后返回。

  • WriteConcern.JOURNALED:写入操作在主节点将数据写入磁盘日志后返回。

以下示例将MongoClient实例的写入关注度设置为"majority"

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<your connection string>"))
.writeConcern(WriteConcern.MAJORITY)
.build();
MongoClient client = MongoClients.create(settings);

以下示例将集合的写入关注度设置为"majority"

MongoCollection<Document> collection = database.getCollection("<collection name>");
collection = collection.withWriteConcern(WriteConcern.MAJORITY);

注意

集合和数据库是不可变的

MongoDatabaseMongoCollection实例是不可变的。当你在数据库或集合上设置写入关注度时,该方法返回一个新实例,而不会影响原始实例。

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

读取关注度指定以下行为

您可以通过客户端或事务上的readConcern()方法或数据库或集合上的withReadConcern()方法指定读取关注度。`readConcern()`和`withReadConcern()`方法接受一个参数,指定读取关注度级别。

您可以设置以下读取关注度级别

  • ReadConcern.LOCAL:查询返回实例的最新数据。不提供数据已写入副本集多数成员的保证。

  • ReadConern.AVAILABLE:查询返回实例的最新数据。不提供数据已写入副本集多数成员的保证。`ReadConcern.AVAILABLE`不可与因果一致会话和事务一起使用。

  • ReadConcern.MAJORITY:查询返回已由副本集多数成员确认的数据。

  • ReadConcern.LINEARIZABLE:查询返回反映在读取操作开始之前成功完成的全部写入的数据。`ReadConcern.LINEARIZABLE`不可与因果一致会话和事务一起使用。

  • ReadConcern.SNAPSHOT:查询返回最近过去特定单点在分片中呈现的多数提交数据。

有关读取关注级别的更多信息,请参阅MongoDB服务器手册中的读取关注级别

以下示例将读取关注级别设置为ReadConcern.MAJORITY,针对一个MongoClient实例。

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<your connection string>"))
.readConcern(ReadConcern.MAJORITY)
.build();
MongoClient client = MongoClients.create(settings);

以下示例将读取关注级别设置为ReadConcern.MAJORITY,针对一个集合。

MongoCollection<Document> collection = database.getCollection("<collection name>");
collection = collection.withReadConcern(ReadConcern.MAJORITY);

有关读取关注级别的更多信息,请参阅MongoDB服务器手册中的读取关注

读取偏好决定了MongoDB在运行查询时从副本集的哪个成员读取。您可以通过在客户端或事务上使用readPreference()方法,或在数据库或集合上使用withReadPreference()方法来设置读取偏好。

readPreference()withReadPreference()方法接受一个读取偏好模式作为参数。您可以设置读取偏好模式为以下值之一

  • ReadPreference.primary():查询从主节点返回数据。

  • ReadPreference.primaryPreferred():如果可用,查询从主节点返回数据。否则,查询从从节点返回数据。

  • ReadPreference.secondary():查询从从节点返回数据。

  • ReadPreference.secondaryPreferred():如果可用,查询从从节点返回数据。否则,查询从主节点返回数据。

  • ReadPreference.nearest():查询从网络延迟最低的节点返回数据。

以下示例将读取偏好设置为ReadPreference.secondary(),针对一个MongoClient实例。

MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("<your connection string>"))
.readPreference(ReadPreference.secondary())
.build();

以下示例将读取偏好设置为ReadPreference.secondary(),针对一个集合。

MongoCollection<Document> collection = database.getCollection("<collection name>");
collection = collection.withReadPreference(ReadPreference.secondary());

有关读取偏好的更多信息,请参阅MongoDB服务器手册中的读取偏好

要了解更多关于本指南中讨论的任何方法或类型,请参阅以下 API 文档

返回

使用中加密