Mongo 更改流时间戳

Mongo changestream timestamp

跟踪 oplog 时,我看到每个事件的时间戳。更改流比直接跟踪 oplog 有优势,所以我想使用它们。但是,我找不到任何方法来确定何时发生更改。如果我的脚本关闭一段时间然后使用恢复令牌恢复,这将是有问题的。

有没有办法得到那个时间戳?

I can't find any way of figuring out when a change occurred.

目前(MongoDB v3.6),无法从接收端找出服务器返回的事件的时间戳。这是因为集群时间的时间戳实际上以二进制格式嵌入到恢复令牌中。

有一张请求添加工具来检查此简历令牌的票证SERVER-32283。请随时 watch/upvote 获取票证更新。

This would be problematic if my script went down for a while and then resumed using a resume token.

使用恢复令牌恢复 Change Streams 时,将从该点开始恢复。这是因为令牌包含集群时间,并且服务器知道令牌最后一次操作的时间 'seen'。

你也说了down for a while。变更流建立在 Replica Set Oplog 之上,这也意味着变更流的可恢复性受到操作日志大小的限制 window。

例如,如果最后缓存的令牌时间是 24 小时前,而 oplog size 只有 12 小时,您的应用程序将无法使用更改流恢复令牌。由于您将 change streamstailing the oplog 进行比较,因此在这方面两者都会有相同的潜在问题。

如果这对您的用例来说是一个真正的问题,请相应地调整您的 oplog window 大小。即,如果接收客户端的潜在停机时间大于 oplog window 时间。

另见 Change Streams Production Recommendations