阅读关注“本地”
读取关注为"local"
的查询从实例返回数据,但不能保证数据已被写入大多数副本集成员(即可以回滚)。
阅读关注"local"
是以下情况的默认值:
-
针对主要对象的读取操作
-
如果读取与因果一致的会话关联,则针对次要对象的读取操作。
无论read concern级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
因果一致的会话
阅读关注local
可用于因果一致的会话。
Example
考虑以下写入三个成员副本集的操作 Write0 的时间轴:
Note
为了简化,该示例假定:
-
Write0 之前的所有写操作已成功复制到所有成员。
-
Writeprev 是 Write0 之前的上一次写入。
-
Write0 之后未发生其他写操作。
Time | Event | 最近写 | 最新 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:写上一页 |
t3 | Primary 知道成功复制到 Secondary1 并将确认发送给 Client 端 | Primary :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写上一页 中学 2:写上一页 |
t4 | Primary 知道成功复制到 Secondary2 | Primary :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写上一页 中学 2:写上一页 |
t5 | Secondary1 收到通知(通过常规复制机制)以更新其最新 w 的快照:“多数”写 | 主要 :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写 0 中学 2:写上一页 |
t6 | Secondary2 收到通知(通过常规复制机制)以更新其最近 w 的快照:“多数”写 | 主要 :写 0 中学 1:写 0 中学 2:写 0 | 小学 :写 0 中学 1:写 0 中学 2:写 0 |
然后,下表总结了在时间T
时具有"local"读关注的读操作将看到的数据状态。
Read Target | 时间T | 数据状态 |
---|---|---|
Primary | After t0 | 数据反映 Write0. |
Secondary1 | Before t1 | 数据反映 Writeprev |
Secondary1 | After t1 | 数据反映 Write0 |
Secondary2 | Before t2 | 数据反映 Writeprev |
Secondary2 | After t2 | 数据反映 Write0 |