文档菜单
文档首页
/
MongoDB 手册
/ /

读取关注点"local"

带有读取关注点 "local" 的查询返回的数据不保证已写入大多数副本集成员(即可能被回滚)。

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

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

读取关注点"local" 可用于具有或没有因果一致会话和事务的情况。

您在事务级别设置读取关注点,而不是在单个操作级别。要设置事务的读取关注点,请参阅事务和读取关注点。

您可以在事务内创建集合和索引。如果显式创建集合或索引,事务必须使用读取关注点 "local"。如果您隐式创建集合,则可以使用事务可用的任何读取关注点。

在副本集上,即使事务使用读取关注点 local,您可能观察到更强的读取隔离性,其中操作从事务开始时的时间点的快照中读取。

考虑以下写操作的时序:将 Write 0 写入三个副本集

注意

为了简化,示例假设

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

  • Write prev 是 Write 0 之前的上一个写操作。

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

Timeline of a write operation to a three member replica set
时间
事件
最近的写操作
最近的 w: "多数" 写操作
t 0
主节点应用 Write 0
主节点:Write 0
辅助节点 1:Write prev
辅助节点 2:Write prev
主节点:Write prev
辅助节点 1:Write prev
辅助节点 2:Write prev
t 1
辅助节点 1 应用 write 0
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write prev
主节点:Write prev
辅助节点 1:Write prev
辅助节点 2:Write prev
t 2
辅助节点 2 应用 write 0
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write 0
主节点:Write prev
辅助节点 1:Write prev
辅助节点 2:Write prev
t 3
主节点意识到成功复制到辅助节点 1 并向客户端发送确认
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write 0
主节点:Write 0
辅助节点 1:Write prev
辅助节点 2:Write prev
t 4
主节点意识到成功复制到辅助节点 2
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write 0
主节点:Write 0
辅助节点 1:Write prev
辅助节点 2:Write prev
t 5
辅助节点 1 通过常规复制机制接收通知,更新其最新的 w: "多数" 写操作快照
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write 0
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write prev
t 6
辅助节点 2 通过常规复制机制接收通知,更新其最新的 w: "多数" 写操作快照
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write 0
主节点:Write 0
辅助节点 1:Write 0
辅助节点 2:Write 0

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

Timeline of a write operation to a three member replica set.
读取目标
时间 T
数据状态
主节点
在 t 0 之后
数据反映了 Write 0
辅助节点 1
在 t 1 之前
数据反映了 Write prev
辅助节点 1
在 t 1 之后
数据反映了 Write 0
辅助节点 2
在 t 2 之前
数据反映了 Write prev
辅助节点 2
在 t 2 之后
数据反映了 Write 0

返回

读取关注点