当拖尾oplog时,我看到每个事件的时间戳。更改流比直接拖动oplog更有优势,所以我想使用它们。但是,我找不到任何方法来确定何时发生了变化。如果我的脚本停止了一段时间然后使用恢复令牌恢复,那么这将是有问题的。
有没有办法获得时间戳?
答案 0 :(得分:1)
我找不到任何方法来确定何时发生了变化。
目前(MongoDB v3.6),无法找到服务器从接收端返回的事件的时间戳。这是因为群集时间的时间戳实际上作为二进制格式嵌入到恢复令牌中。
有一张票要求添加工具来检查此恢复令牌SERVER-32283。随意观看/ upvote获取门票的更新。
如果我的脚本停止了一段时间然后使用恢复令牌恢复,那么这将会有问题。
使用恢复令牌恢复Change Streams时,它将从此时开始恢复。这是因为令牌包含集群时间,服务器知道令牌“看到”的最后一次操作。
您还说down for a while
。变更流建立在Replica Set Oplog之上,这也意味着变更流的可恢复性受到oplog窗口大小的限制。
例如,如果上次缓存的令牌时间是24小时前且oplog size仅为12小时,则您的应用程序将无法使用更改流恢复令牌。由于您将change streams
与tailing the oplog
进行比较,因此在这方面两者都会产生相同的潜在问题。
如果这是您的用例的真正问题,请相应地调整您的oplog窗口大小。即,如果接收客户端的潜在停机时间大于oplog窗口时间。