【问题标题】:MongoDB Change Streams read changes from pastMongoDB Change Streams 读取过去的更改
【发布时间】:2020-06-24 13:24:23
【问题描述】:

我想读取数据库中集合的更改。现在我在直接使用 oplog 和Change Streams 之间进行选择。我对 oplog Change Streams 能力没有什么疑问

  1. 如何使用 Change Streams 从 oplog 一开始就开始读取更改?

使用 oplog,我可以在零时间戳的 oplog 集合上使用 find(),但使用 Change Streams 我只能传递 resumeAfterstartAfter 令牌。当我没有指定光标选项时,它会从当前时刻开始读取更改,但在第一次运行时我需要从头开始。

  1. 如果我的更改阅读器会落后于 oplog 并且 resumeAfter 变得过时怎么办?

来自documentation

如果时间戳是过去的,oplog 必须有足够的历史来定位与令牌或时间戳关联的操作。

如何正确处理这种情况?

  1. 现在我需要从单个集合中读取更改,但将来我可能需要从多个集合中读取更改

使用 oplog,我可以扩展查找过滤器并继续使用状态中的时间戳。我可以对 Change Streams 做同样的事情吗?

【问题讨论】:

    标签: mongodb changestream


    【解决方案1】:

    您可以使用startAtOperationTime option 指定变更流的开始时间。开始时间必须在 oplog 窗口内。

    应该可以从令牌引用的点开始更改流,该点是过去的,但您需要事先从更改流中获取令牌。没有 API 可以在客户端从头开始创建令牌。

    【讨论】:

    • 文档说我可以用db.getReplicationInfo()检查令牌,但如果 oplog 快速移动它就不太可靠:(
    • 文档说在哪里?
    • docs.mongodb.com/manual/reference/method/db.collection.watchTo check the time range of the oplog, see **rs.printReplicationInfo().**
    • 指的是操作时间,不是恢复令牌。你到底在说什么?
    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 2018-07-02
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2021-01-02
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多