Docs 菜单
Docs 主页
/ / /
Java Reactive Streams 驱动程序

配置副本集操作

在此页面上

  • Overview
  • 写关注
  • 读关注 (read concern)
  • 读取偏好
  • API 文档

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

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

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

  2. 事务

  3. Database

  4. Collection

前面的列表按优先级递增。 示例,如果您在客户端和数据库级别都设立了读读关注(read concern),则在数据库级别指定的读关注将覆盖在客户端级别指定的读关注(read concern)。

写关注指定在操作成功返回之前从MongoDB请求的写入操作确认级别。 未指定显式写关注(write concern)的操作会继承全局默认写关注(write concern)设置。

您可以在客户端或ACID 事务上使用 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.MAJORITY:在大多数副本集成员确认写入操作后,写入操作将返回。

  • WriteConcern.UNACKNOWLEDGED:主节点 (primary node in the replica set)节点处理完写入操作后,写入操作将返回。

  • WriteConcern.JOURNALED:写入操作在主节点 (primary node in the replica set)节点将数据写入磁盘上日志后返回。

以下示例将 实例的写关注(write concern)设置为"majority" MongoClient

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

以下示例将集合的写关注(write concern)设置为"majority"

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

注意

集合和数据库是不可变的

MongoDatabaseMongoCollection实例是不可变的。 在数据库或集合上设立写关注(write concern)时,该方法会返回一个新实例,不会影响原始实例。

有关写关注(write concern)的更多信息,请参阅MongoDB Server手册中的写关注

读关注指定以下行为:

您可以在客户端或ACID 事务上使用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

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

以下示例将集合的读关注(read concern)设置为ReadConcern.MAJORITY

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

要学习;了解有关读关注(read concern)的更多信息,请参阅MongoDB Server手册中的读关注

读取偏好决定了MongoDB在运行查询时会读取副本集的哪个成员。 您可以在客户端或ACID 事务上使用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

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

以下示例将集合的读取偏好(read preference)设置为ReadPreference.secondary()

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

有关读取偏好(read preference)的更多信息,请参阅MongoDB Server手册中的读取偏好

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

正在使用的加密