On this page
阅读关注“可用”
3.6 版的新功能。
具有读取关注点“可用”的查询从实例返回数据,而不能保证该数据已被写入大多数副本集成员(即可以回滚)。
如果读取与“ 因果一致的会话”不关联,则“读取关注”为“可用”是针对次要读取的默认设置。
对于分片群集,"available"读取关注点提供了更大的分区容忍度,因为它不 await 确保一致性的保证。但是,如果分片正在进行块迁移,则具有"available"读取关注点的查询可能会返回孤立文档,因为"available"读取关注点与"local"读取关注点不同,不会与分片的主数据库或配置服务器联系以获取更新的metadata。
对于未分片的集合(包括独立部署或副本集部署中的集合),"local"和"available"读关注点的行为相同。
无论read concern级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
See also
因果一致的会话
阅读关注available
无法用于因果一致的会话。
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
时具有"available"读关注的读操作将看到的数据状态。
Read Target | 时间T |
数据状态 |
---|---|---|
Primary | After t0 | 数据反映 Write0. |
Secondary1 | Before t1 | 数据反映 Writeprev |
Secondary1 | After t1 | 数据反映 Write0 |
Secondary2 | Before t2 | 数据反映 Writeprev |
Secondary2 | After t2 | 数据反映 Write0 |