mongodb - MongoDB Change Streams 读取过去的更改
问题描述
我想读取数据库中集合的更改。现在我在直接使用 oplog 和Change Streams之间进行选择。我对 oplog Change Streams 能力几乎没有疑问
- 如何使用 Change Streams 从 oplog 一开始就开始读取更改?
使用 oplog 我可以find()
在具有零时间戳的 oplog 集合上使用,但使用 Change Streams 我只能传递resumeAfter
和startAfter
令牌。当我没有指定光标选项时,它会从当前时刻开始读取更改,但在第一次运行时,我需要从头开始。
- 如果我的更改阅读器会落后于 oplog 并
resumeAfter
变得过时怎么办?
从文档:
如果时间戳是过去的,oplog 必须有足够的历史来定位与令牌或时间戳关联的操作。
如何正确处理这种情况?
- 现在我需要从单个集合中读取更改,但将来我可能需要从多个集合中读取更改
使用 oplog,我可以扩展查找过滤器并继续使用状态中的时间戳。我可以对 Change Streams 做同样的事情吗?
解决方案
您可以使用startAtOperationTime 选项来指定更改流的开始时间。开始时间必须在 oplog 窗口内。
应该可以从令牌引用的点开始更改流,该点是过去的,但是您需要之前从更改流中获取令牌。没有 API 可以在客户端从头开始创建令牌。
推荐阅读
- python - pandoc-markdown 引用的正则表达式
- java - 除非强制唯一时间,否则带有 influxdb-java 的批处理点会被覆盖?
- javascript - 如何用 JavaScript 替换输入值中的对象值
- c - 在C中对结构列表进行排序
- python - 电子邮件验证 django rest 框架
- javascript - 按对象从数组对象分组到树对象Javascript
- javascript - Javascript 数组到 html div 标签 .aspx
- mongodb - 具有 NFS 持久卷配置的 Kubernetes MongoDB pod
- javascript - 根据名字和姓氏对角卡进行排序
- regex - 小写除一些使用 Nginix 的所有 url