阅读关注“多数”

在本页面

读取关注为"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 之后未发生其他写操作。

对三个成员副本集的写操作的时间轴。

TimeEvent最近写最新 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:写上一页
t3Primary 知道成功复制到 Secondary1 并将确认发送给 Client 端Primary :写 0
中学 1:写 0
中学 2:写 0
小学 :写 0
中学 1:写上一页
中学 2:写上一页
t4Primary 知道成功复制到 Secondary2Primary :写 0
中学 1:写 0
中学 2:写 0
小学 :写 0
中学 1:写上一页
中学 2:写上一页
t5Secondary1 收到通知(通过常规复制机制)以更新其最新 w 的快照:“多数”写主要 :写 0
中学 1:写 0
中学 2:写 0
小学 :写 0
中学 1:写 0
中学 2:写上一页
t6Secondary2 收到通知(通过常规复制机制)以更新其最近 w 的快照:“多数”写主要 :写 0
中学 1:写 0
中学 2:写 0
小学 :写 0
中学 1:写 0
中学 2:写 0

然后,下表总结了在时间T时具有"majority"读关注的读操作将看到的数据状态。

对三个成员副本集的写操作的时间轴。

Read Target时间T数据状态
PrimaryBefore t3数据反映 Writeprev
PrimaryAfter t3数据反映 Write0
Secondary1Before t5数据反映 Writeprev
Secondary1After t5数据反映 Write0
Secondary2在 t6 之前或 t6数据反映 Writeprev
Secondary2After 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 架构无法固定部署,可以通过设置以下任一选项来禁用读取问题:

Important

通常,除非必要,请避免禁用"majority"阅读关注。但是,如果您有一个具有主要-次要仲裁器(PSA)体系结构的三成员副本集或具有三成员 PSA 分片的分片群集,请禁用该功能以防止存储高速缓存压力使部署无法固定。

禁用"majority"读取关注会禁用对Change Streams的支持。