首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取关注的“快照”和相应的clusterTime

读取关注的“快照”和相应的clusterTime
EN

Stack Overflow用户
提问于 2022-06-25 22:31:29
回答 1查看 172关注 0票数 1

在MongoDB 5.x中有一个非常方便的附加项,它允许在事务之外的某些读取操作中强制执行snapshot读取关注点,并指定通过atClusterTime获取快照的时间戳。如果没有提供时间戳,mongo将自动选择它,并将其值返回给用户以供将来参考。请参见:

https://www.mongodb.com/docs/v6.0/reference/read-concern-snapshot/#read-concern-and-atclustertime

由于MongoDB 4.x还支持读关注点snapshot (但只支持写关注点majority的事务),所以我想知道是否也可以获得一些信息,说明快照是什么时候拍摄的,类似于5.x正在做的事情。我知道我不能显式地指定atOperationTime,但是mongo需要自己选择时间戳,所以期望这些信息在某个地方是可用的似乎是合理的。

EN

Stack Overflow用户

发布于 2022-07-10 21:47:13

对于Mongo < 5.0,恐怕没有获得集群时间的方便方法。您可以随时检查日志,但我不认为这是一个可靠的解决方案。无论如何,这里有一个您可以在mongo上运行的脚本:

代码语言:javascript
运行
复制
db.adminCommand( { getLog : "global" } ).log
    .map(x => JSON.parse(x))
    .filter(x => x.c === "TXN")
    .forEach(x => print(JSON.stringify(x.attr.parameters.readConcern)))

让我们首先说,带有getLog过滤器的global命令只返回最新的日志,所以如果您要查找旧的事务,我想您需要解析物理日志文件。这个剧本:

  1. 解析日志条目,将它们从字符串转换为JS对象。
  2. 筛选条目并只保留与事务相关的条目,有关所有类型和附加信息,请参见这里
  3. 检索readConcern参数并将它们打印到控制台

您应该会看到一个类似于此的输出:

代码语言:javascript
运行
复制
{"level":"snapshot","provenance":"clientSupplied"}
{"level":"snapshot","afterClusterTime":{"$timestamp":{"t":1657483320,"i":1}},"provenance":"clientSupplied"}
{"level":"snapshot","afterClusterTime":{"$timestamp":{"t":1657483977,"i":1}},"provenance":"clientSupplied"}

我们找到了集群时间:afterClusterTime

在第一个事务中,我向一个空集合添加了一个文档,这可能是为什么它没有显示集群时间(当然也没有使用)。我不知道每个参数的含义,也不知道所有无法获得集群时间的情况,但是有好消息。若要获取属于给定事务id的日志(如果存在的话),需要应用此筛选器(而不是上面所示的):

代码语言:javascript
运行
复制
.filter(x => x.c === "TXN" && x.attr.parameters.txnNumber === your_txn_id)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72757752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档