MongoDB 4.x事务内snapshot读关注如何获取快照时间戳
结论
MongoDB 4.x版本在配置了majority写关注的事务内使用snapshot读关注时,完全可以获取到快照对应的具体生成时间戳,不需要依赖5.x版本新增的事务外snapshot读、atClusterTime显式传参能力。
版本能力差异说明
- MongoDB 5.x及以上版本:snapshot读关注不再局限于事务内使用,支持在事务外的部分读操作中强制开启;用户可通过
atClusterTime参数手动指定快照对应的集群时间戳,若未手动传入该参数,系统自动选择的时间戳会随操作结果直接返回,供后续操作参考复用。 - MongoDB 4.x版本:snapshot读关注仅支持在配置了
majority写关注的多文档事务内使用,不支持显式传入atClusterTime/atOperationTime参数自定义快照时间点,但系统自动选定的快照时间戳依然可以通过操作的返回元数据正常获取。
4.x版本获取快照时间戳的方法
MongoDB 4.x的副本集、分片集群默认启用因果一致性保障,所有读写操作的返回结果元数据中都会自带operationTime字段,该字段记录的就是当前操作对应的集群逻辑时间戳。
在4.x版本的事务流程中:
- 事务发起后第一个使用snapshot读关注的操作执行时,MongoDB会自动选定一个多数提交的时间点作为整个事务的固定快照时间
- 该时间点的值就会被写入这第一个读操作返回结果的
operationTime字段中 - 事务后续所有操作都会复用这个固定快照时间,不会再变更
注意:不需要额外做特殊配置,只要是符合4.x版本snapshot读关注使用要求的事务(即配置了majority写关注),直接提取事务内第一个snapshot读操作返回的
operationTime值,就是该事务快照的准确生成时间。
内容的提问来源于stack exchange,提问作者Tomasz Lenarcik
相关产品推荐
相关产品推荐

