阅读关注“多数”
在本页面
读取关注为"majority"
的查询返回的数据已被大多数副本集成员确认。
要使用read concern级别"majority",副本集必须使用WiredTiger 存储引擎和选举协议版本 1。
从 MongoDB 3.6 开始,默认情况下启用对读取关注"majority"的支持。对于 MongoDB 3.6.1-3.6.x,您可以禁用阅读关注"majority"。有关更多信息,请参见禁用多数阅读关注。
无论read concern级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
Example
考虑以下写入三个成员副本集的操作 Write0 的时间轴:
Note
为了简化,该示例假定:
-
Write0 之前的所有写操作已成功复制到所有成员。
-
Writeprev 是 Write0 之前的上一次写入。
-
Write0 之后未发生其他写操作。
Time | Event | 最近写 | 最新 w:“多数”写道 |
---|---|---|---|
t0 | 主要适用 Write0 | 小学 :写 0 | |
中学 1:写上一页 中学 2:写上一页 | 小学 :写上一页 中学 1:写上一页 中学 2:写上一页 | ||
t1 | 中学 1 应用 write0 | 小学 :写 0 中学 1:写 0 中学 2:写上一页 | 小学 :写上一页 中学 1:写上一页 中学 2:写上一页 |
t2 | 辅助 2 应用 write0 | 主要 :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写上一个 中学 1:写上一页 中学 2:写上一页 |
t3 | Primary 知道成功复制到 Secondary1 并将确认发送给 Client 端 | Primary :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写上一页 中学 2:写上一页 |
t4 | Primary 知道成功复制到 Secondary2 | Primary :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写上一页 中学 2:写上一页 |
t5 | Secondary1 收到通知(通过常规复制机制)以更新其最新 w 的快照:“多数”写 | 主要 :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写 0 中学 2:写上一页 |
t6 | Secondary2 收到通知(通过常规复制机制)以更新其最近 w 的快照:“多数”写 | 主要 :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写 0 中学 2:写 0 |
然后,下表总结了在时间T
时具有"majority"读关注的读操作将看到的数据状态。
Read Target | 时间T | 数据状态 |
---|---|---|
Primary | Before t3 | 数据反映 Writeprev |
Primary | After t3 | 数据反映 Write0 |
Secondary1 | Before t5 | 数据反映 Writeprev |
Secondary1 | After t5 | 数据反映 Write0 |
Secondary2 | 在 t6 之前或 t6 | 数据反映 Writeprev |
Secondary2 | After t6 | 数据反映 Write0 |
存储引擎支持
阅读关注"majority"可用于 WiredTiger 存储引擎。
Tip
serverStatus命令返回storageEngine.supportsCommittedReads字段,该字段指示存储引擎是否支持"majority"
读取关注。
因果一致的会话
阅读关注majority
可用于因果一致的会话。
阅读您自己的文章
在版本 3.6 中更改。
从 MongoDB 3.6 开始,如果写入请求确认,则可以使用因果一致的会话来读取自己的写入。
在 MongoDB 3.6 之前,您必须以{ w: "majority" }写入关注度发出写入操作,然后对读取操作使用"majority"或"linearizable"读取关注度,以确保单个线程可以读取自己的写入。
禁用多数阅读问题
对于 3 成员的主次仲裁器体系结构
对于 MongoDB 3.6.1-3.6.x,如果您具有具有主要-次要仲裁器(PSA)体系结构的三成员副本集或具有三成员 PSA 分片的分片群集,则可以禁用读关注"majority"。
Note
如果您使用的是 3 成员 PSA 以外的部署,则无需禁用多数读关注。
对于三成员 PSA 架构,如果任何数据承载节点关闭,则缓存压力将增加。为防止存储缓存压力使 PSA 架构无法固定部署,可以通过设置以下任一选项来禁用读取问题:
-
--enableMajorityReadConcern命令行选项
false
。 -
replication.enableMajorityReadConcern配置文件设置为
false
。
Important
通常,除非必要,请避免禁用"majority"阅读关注。但是,如果您有一个具有主要-次要仲裁器(PSA)体系结构的三成员副本集或具有三成员 PSA 分片的分片群集,请禁用该功能以防止存储高速缓存压力使部署无法固定。
禁用"majority"读取关注会禁用对Change Streams的支持。