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

读取关注点"available"

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

  • 对于分片集群, "available" 读取关注点提供了对分区的更大容错能力。

    具有 "available" 读取关注点的查询不需要检查是否正确接收查询的正确分片。

    在网络分区的情况下,这些查询路由到网络分区发生之前认为适当的分片。它们不会等待来自可能不可用的服务器的一致性保证。如果分片正在执行数据分块迁移,具有 "available" 的查询可以返回孤儿文档.

    警告

    mongos 不保证具有 "available" 读取关注点的查询路由到正确的分片。接收查询的分片返回数据,但此分片可能不是请求数据的权威所有者。

    这可能导致查询返回不正确或意外的结果。

  • 对于未分片的集合(包括独立部署或副本集部署中的集合),"local""available" 读取关注点行为相同。

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

提示

另请参阅

读取关注点 "available"不可用于因果一致会话和事务

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

注意

为了简化,示例假设

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

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

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

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

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

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

返回

"local"