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

读关注 (read concern) "local"

具有 "local" 读关注的查询从实例中返回数据,但不保证数据已写入到大多数副本集节点(即可能会回滚)。

"local" 读关注是针对主节点和从节点的读取操作的默认设置。

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

"local"无论有没有因果一致的会话和事务,均可使用读关注 。

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

您可以在ACID 事务中创建集合和索引。如果显式创建集合或索引,ACID 事务必须使用读关注(read concern)"local" 。如果隐式创建集合,则可以使用任何可用于事务的读关注。

在副本集上,即使ACID 事务使用读关注(read concern)local ,您也可能会观察到更强的读隔离性性,因为该操作会从ACID 事务打开点的快照中读取。

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

注意

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

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

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

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

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

t 0

主节点应用 Write 0

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

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

t 1

从节点 1 应用 write 0

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

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

t 2

从节点 2 应用 write 0

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

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

t 3

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

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

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

t 4

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

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

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

t 5

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

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

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

t 6

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

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

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

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

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

主节点

t 0之后

数据反映写入 0。

从节点 1

t1 之前

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

从节点 1

在 t 1 之后

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

从节点 2

t 2 之前

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

从节点 2

在 t 2 之后

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

给本页内容打分