读关注 "available"

version 3.6 中的新内容。

与read有关的“available”查询从实例返回数据,但不保证数据已经被写入大多数复制集成员(即可能被回滚)。

如果读操作不与因果一致的会话相关联,那么读关注“available”是对次要操作的默认读操作。

对于分片 cluster,["available"](https://docs.mongodb.com/master/reference/read-concern-available/#readconcern."available") 读取问题为分区提供了更大的容忍度,因为它不会等待以确保一致性保证。但是,如果分片正在进行大块迁移,那么带有 ["available"](https://docs.mongodb.com/master/reference/read-concern-available/#readconcern."available")读取问题的查询可能会return孤立文档,因为“本地”读取问题与“本地”读取问题不同,它不会联系分片的主服务器或配置服务器以更新元数据。

对于unsharded集合(包括独立部署或复制集部署中的集合),["local"](https://docs.mongodb.com/master/reference/read-concern-local/#readconcern."local") 和 ["available"](https://docs.mongodb.com/master/reference/read-concern-available/#readconcern."available") 读取问题的行为相同。

不管read concern级别,节点上的最新数据可能不能反映系统中数据的最新版本。

也可以看看

orphanCleanupDelaySecs

可用行

读关注 available对于因果一致的会话和事务不可用。

例子

考虑写入操作 Write0 到三个成员复制集的以下时间轴:

[success] Note

为了简化,本例假设:

  • Write0 之前的所有写操作都已成功复制到所有成员。

  • Writeprev 是 Write0之前的写入。

  • 在 Write0之后没有发生其他写操作。

Timeline of a write operation to a three member replica set.
时间
事件
最新写
最新的多数写

t0

主要适用于Write0

主要:Write0 次要1:Writeprev 次要2:Writeprev

主要:Writeprev 次要1:Writeprev 次要2:Writeprev

t1

Secondary1适用于Write0

主要:Write0 次要1:Write0 次要2:Writeprev

主要:Writeprev 次要1:Writeprev 次要2:Writeprev

t2

Secondary2适用于Write0

主要:Write0 次要1:Write0 次要2:Write0

主要:Writeprev 次要1:Writeprev 次要2:Writeprev

t3

Primary知道到Secondary1的复制成功,并向客户端发送确认

主要:Write0 次要1:Write0 次要2:Write0

主要:Write0 次要1:Writeprev 次要2:Writeprev

t4

Primary 知道成功复制到 Secondary2

主要:Write0 次要1:Write0 次要2:Write0

主要:Write0 次要1:Writeprev 次要2:Writeprev

t5

Secondary1接收通知(通过常规复制机制)以更新其最近 w:“多数”写入的快照

主要:Write0 次要1:Write0 次要2:Write0

主要:Write0 次要1:Write0 次要2:Writeprev

t6

Secondary2接收通知(通过常规复制机制)以更新其最近 w:“多数”写入的快照

主要:Write0 次要1:Write0 次要2:Write0

主要:Write0 次要1:Write0 次要2:Write0

然后,下表总结了 time读取关注的读操作在 time T处将看到的数据的 state。

阅读目标

Time T

状态的数据

Primary

After t0

Data reflects Write0

Secondary1

Before t1

Data reflects Writeprev

Secondary1

After t1

Data reflects Write0

Secondary2

Before t2

Data reflects Writeprev

Secondary2

After t2

Data reflects Write0

译者:杨帅

校对:杨帅

最后更新于