对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

读关注“majority”

"majority"

对于与多文档事务无关的读取操作,读关注 "majority" 保证读取的数据已得到副本集大多数成员的确认。读取的文档是持久性的,并且保证不会回滚。

For operations in multi-document transactions, read concern "majority" provides its guarantees only if the transaction commits with write concern "majority". Otherwise, the "majority" read concern provides no guarantees about the data read in transactions.

无论读关注级别如何,节点上的最新数据可能无法反映系统中数据的最新版本。

有关主节点发生故障时会出现什么情况的更多信息,请参阅自动故障转移

每个副本集成员均会在内存中维护处于大多数提交点的数据的视图,而大多数提交点将由主节点算出。为完成读关注 "majority",此节点会从该视图返回数据,性能与其他读关注相当。

读关注(read concern)"majority" 不会降低查询性能;它只修改返回给客户端的内容。读关注(read concern)"majority" 仅允许持久存储在副本集大多数节点上的数据返回给客户端。相比之下,具有读关注(read concern)"local" 的查询可以返回在某些情况下可能丢失的数据,例如回滚。

Read concern "majority" is available for use with or without causally consistent sessions and transactions.

警告

如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:

  • 如果从节点不可用或滞后,写关注(write concern) "majority" 可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解自管理 PSA 副本集的性能问题。

  • If you are using a global default "majority" and the write concern is less than the size of the majority, your queries may return stale (not fully replicated) data.

考虑以下对三节点副本集执行 Write 0 写入操作的时间轴:

注意

为简单起见,该示例预设以下条件:

  • Write 0 之前的所有写入均已成功复制到所有成员。

  • Write prev 是 Write 0 前一次的写入操作。

  • Write 0 之后没有发生其他写入操作。

对一个三节点组成的副本集执行写入操作的时间轴
时间
事件
最新写入
最新 w: "majority" 写入

t 0

主节点应用 Write 0

0
1主节点:写入 从节点 :写入上一个
从节点2 :写入上一个

主节点:写入上一个
1从节点:写入上一个 :写入上一个
2从节点:写入上一个 :写入上一个

t 1

从节点 1 应用 write 0

主节点:写入0
1从节点 :写入0
从节点2 :写入上一个

Primary: Write prev
Secondary 1: Write prev
Secondary 2: Write prev

t 2

从节点 2 应用 write 0

主节点:写入0
1从节点 :写入0
从节点2 :写入0

Primary: Write prev
Secondary 1: Write prev
Secondary 2: Write prev

t 3

主节点知道已成功复制到从节点 1,并向客户端发送确认

Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0

Primary: Write 0
Secondary 1: Write prev
Secondary 2: Write prev

t 4

主节点感知到数据已成功复制到从节点 2

Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0

Primary: Write 0
Secondary 1: Write prev
Secondary 2: Write prev

t 5

从节点 1 收到通知(通过常规复制机制),要求更新其最新 w: "majority" 写入的快照

Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0

Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write prev

t 6

从节点 2 收到通知(通过常规复制机制),要求更新其最新 w: "majority" 写入的快照

Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0

Primary: Write 0
Secondary 1: Write 0
Secondary 2: Write 0

Then, the following tables summarizes the state of the data that a read operation with "majority" read concern would see at time T.

对一个三节点组成的副本集执行写入操作的时间轴。
读取目标
时间 T
数据状态

主节点

t 3 之前

数据反映为 Write prev 应用后的状态

主节点

t 3 之后

数据反映为 Write 0 应用后的状态

从节点 1

t 5 之前

数据反映为 Write prev 应用后的状态

从节点 1

t 5 之后

数据反映为 Write 0 应用后的状态

从节点 2

t 6 之前或同时

数据反映为 Write prev 应用后的状态

从节点 2

t 6 之后

数据反映为 Write 0 应用后的状态

Read concern "majority" is available for the WiredTiger storage engine.

提示

serverStatus 命令会返回 storageEngine.supportsCommittedReads 字段,而该字段可表示存储引擎是否支持 "majority" 读关注。

注意

您可以在事务级别设置读关注,而不是在单个操作级别。要为事务设置读关注,请参阅事务和读关注(read concern)。

For operations in multi-document transactions, read concern "majority" provides its guarantees only if the transaction commits with write concern "majority". Otherwise, the "majority" read concern provides no guarantees about the data read in transactions.

You can specify read concern level "majority" for an aggregation that includes an $out stage.

如果写入请求确认,您可以使用因果一致的会话来读取您自己的写入。

从 MongoDB 5.0 开始,由于改进了存储引擎,enableMajorityReadConcern--enableMajorityReadConcern 不可更改,并始终设置为 true

在 MongoDB 的早期版本中,enableMajorityReadConcern--enableMajorityReadConcern 均可配置,可以设置为 false,以防止由三个节点组成的主-从-仲裁 (PSA) 架构的部署因存储缓存压力而停止运行。

如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:

  • 如果从节点不可用或滞后,写关注(write concern) "majority" 可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解自管理 PSA 副本集的性能问题。

  • If you are using a global default "majority" and the write concern is less than the size of the majority, your queries may return stale (not fully replicated) data.