1

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

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

4

1 回答 1

2

我找不到任何方法来确定何时发生更改。

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

有一张票可以请求添加一个工具来检查这个恢复令牌SERVER-32283。随时观看/支持票的更新。

如果我的脚本停机一段时间然后使用恢复令牌恢复,这将是有问题的。

使用恢复令牌恢复更改流时,它将从该点开始恢复。这是因为令牌包含集群时间,并且服务器知道令牌“看到”的最后一次操作是什么时候。

你也说down for a while。变更流建立在Replica Set Oplog 之上,这也意味着变更流的可恢复性受到 oplog 窗口大小的限制。

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

如果这是您的用例真正关心的问题,请相应地调整您的 oplog 窗口大小。即,如果接收客户端的潜在停机时间大于 oplog 窗口时间。

另请参阅更改流生产建议

于 2018-04-24T01:55:30.493 回答