参考 > MongoDB CRUD操作 > 读取隔离(关注读取) > 阅读关注 "available"
3.6版的新功能。
具有读取关注点“可用”的查询从实例返回数据,但不保证数据已被写入大多数副本集成员(即可以回滚)。
如果次要读取不与因果一致的会话相关联,则默认为“关注”是针对次要读取。
对于分片群集,由于"available"
读取关注点不会等待确保一致性保证,因此它提供了更大的分区容忍度。也就是说,读问题
"available"
不会联系分片的主数据库或配置服务器以获取更新的元数据。但是,这意味着如果分片正在进行块迁移,则具有"available"
读取关注的查询可能会返回
孤立文档。
对于unsharded集合(包括独立部署或副本集中部署的集合),"local"
并
"available"
读担忧的行为相同。
无论读关注级别如何,节点上的最新数据都可能无法反映系统中数据的最新版本。
也可以看看
阅读关注available
是无法使用
与因果关系是一致的会话和交易。
考虑以下写操作的时间轴,将0写入三个成员副本集:
注意
为了简化,该示例假定:
时间 | 事件 | 最近写 | 最新w:“多数”写道 |
---|---|---|---|
Ť 0 | 主要适用写0 | 小学:写0
中一:写上一页
中学2:写上一页
|
小学:上一篇
中一:写上一页
中学2:写上一页
|
Ť 1 | 中学1适用于写0 | 小学:写0
中学1:写0
中学2:写上一页
|
小学:上一篇
中一:写上一页
中学2:写上一页
|
第2 | 中学2应用写0 | 小学:写0
中学1:写0
中学2:写0
|
小学:上一篇
中一:写上一页
中学2:写上一页
|
第3 | 主节点知道成功复制到辅助节点1并将确认发送给客户端 | 小学:写0
中学1:写0
中学2:写0
|
小学:写0
中一:写上一页
中学2:写上一页
|
第4 | 主节点知道已成功复制到辅助节点2 | 小学:写0
中学1:写0
中学2:写0
|
小学:写0
中一:写上一页
中学2:写上一页
|
吨5 | 备用节点1收到通知(通过常规复制机制)以更新其最近w的快照:“多数”写入 | 小学:写0
中学1:写0
中学2:写0
|
小学:写0
中学1:写0
中学2:写上一页
|
第6 | 备用节点2收到通知(通过常规复制机制)以更新其最新w:“多数”写入的快照 | 小学:写0
中学1:写0
中学2:写0
|
小学:写0
中学1:写0
中学2:写0
|
然后,下表总结了具有"available"
读取关注的读取操作在时间将看到的数据状态T
。
读取目标 | 时间 T |
数据状态 |
---|---|---|
主 | t 0之后 | 数据反映写0。 |
中学1 | t 1之前 | 数据反映了写上一页 |
中学1 | t 1之后 | 数据反映写0 |
中学2 | t 2之前 | 数据反映了写上一页 |
中学2 | t 2之后 | 数据反映写0 |