读取关注点"local"
带有读取关注点 "local"
的查询返回的数据不保证已写入大多数副本集成员(即可能被回滚)。
读取关注点 "local"
是针对主节点和辅助节点的读取操作默认设置。
无论读取关注点 级别如何,节点上的最新数据可能不反映系统中数据的最新版本。
可用性
读取关注点"local"
可用于具有或没有因果一致会话和事务的情况。
读取关注点本地和事务
您在事务级别设置读取关注点,而不是在单个操作级别。要设置事务的读取关注点,请参阅事务和读取关注点。
您可以在事务内创建集合和索引。如果显式创建集合或索引,事务必须使用读取关注点 "local"
。如果您隐式创建集合,则可以使用事务可用的任何读取关注点。
在副本集上,即使事务使用读取关注点 local
,您可能观察到更强的读取隔离性,其中操作从事务开始时的时间点的快照中读取。
示例
考虑以下写操作的时序:将 Write 0 写入三个副本集
注意
为了简化,示例假设
在 Write 0 之前的所有写操作都已成功复制到所有成员。
Write prev 是 Write 0 之前的上一个写操作。
Write 0 之后没有发生其他写操作。
时间 | 事件 | 最近的写操作 | 最近的 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"
读取关注点的读取操作所看到的数据状态。
读取目标 | 时间 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。 |