我需要通过守护进程在运行时获取收集操作的序列,以将其写入类似于消息代理的系统。从指定位置读取历史的必要能力
也许我可以通过阅读 opLog 来解决这个问题。
- 使用opLog是正确的解决方案吗?
- oplog 是否包含所有数据库的记录,而不是被集合分割?
使用 MongoDB v4.2
我需要通过守护进程在运行时获取收集操作的序列,以将其写入类似于消息代理的系统。从指定位置读取历史的必要能力
也许我可以通过阅读 opLog 来解决这个问题。
使用 MongoDB v4.2
使用opLog是正确的解决方案吗?
oplog 格式是内部的,旨在支持复制。作为一种内部格式,它可能会在主要服务器版本之间发生变化,并且不易于使用。
您应该改用基于 oplog 并允许订阅集合、数据库或部署级别的数据更改的Change Streams API 。与直接 oplog 访问不同,更改流具有文档化的 API,可以通过访问控制进行限制,可以对流输出执行一些过滤和修改,并且可以扩展以支持副本集和分片集群。如果中断,更改流也可以恢复。
从指定位置读取历史的必要能力
MongoDB 4.0+ 中的更改流允许您指定startAtOperationTime
在特定时间点打开游标。如果指定的起点是过去,则必须在oplog的时间范围内。
oplog 是否包含所有数据库的记录,而不是被集合分割?
oplog 是一个上限集合,包含副本集或分片的所有数据更改的滚动历史记录。上限集合方面意味着 oplog 有一个有限的历史窗口:一旦达到最大 oplog 大小,最旧的条目就会被删除,以便为新文档腾出空间。local.oplog.rs
数据不按集合或命名空间过滤。