Docs 菜单

Docs 主页开发应用程序MongoDB Manual

读关注 (read concern) "snapshot"

在此页面上

  • 操作
  • 读关注和事务
  • 读关注和 atClusterTime
  • 针对固定大小集合的读关注

4.0 版本中的新功能

5.0 版本中的更改

具有读关注 "snapshot" 的查询会返回最近某个特定时间点跨分片出现的多数提交数据。仅当事务以写关注 "majority" 提交时,读关注 "snapshot" 才提供保证。

读关注 "snapshot" 可用于多文档事务,以及从 MongoDB 5.0 开始,多文档事务之外的某些读取操作。

  • 如果事务不是因果一致会话的一部分,则在以写关注 "majority" 提交事务时,保证已从多数提交数据的快照中读取事务操作。

  • 如果事务是因果一致会话的一部分,则在以写关注 "majority" 提交事务后,保证事务操作从多数提交数据的快照中读取,该快照与事务开始前立即执行的操作具有因果一致性。

在多文档事务之外,读关注 "snapshot"可在主节点和从节点上用于以下读取操作:

所有其他读取命令都禁止"snapshot"

有关接受读关注的所有操作的列表,请参阅支持读关注的操作。

多文档事务支持读关注"snapshot"以及"local""majority"

注意

您可以在事务级别设置读关注,而不是在单个操作级别。要为事务设置读关注,请参阅事务和读关注(read concern)。

版本 5.0 中的新增功能

在多文档事务之外,带有读关注"snapshot"的读取支持可选参数atClusterTime 。参数atClusterTime允许您指定读取的时间戳。为了满足指定为 T 的atClusterTime的读取请求, mongod根据时间 T 时可用的数据执行该请求。

您可以从 db.runCommand() 的响应或从 Session() 对象获取操作的 operationTimeclusterTime

以下命令执行读关注为"snapshot"的查找操作,并指定该操作应在集群时间Timestamp(1613577600, 1)从快照读取数据。

db.runCommand( {
find: "restaurants",
filter: { _id: 5 },
readConcern: {
level: "snapshot",
atClusterTime: Timestamp(1613577600, 1)
},
} )

如果未提供参数 atClusterTime,则 mongos 或在单个成员副本中设置 mongod,选择最新的多数提交快照的时间戳作为 atClusterTime,并将其返回给客户端。

在事务之外,保证"snapshot"读取会读取多数提交数据。

从版本5 开始。0 ,从固定"snapshot" 大小 集合读取时不能使用读关注 。

← 读关注 (read concern) "linearizable"