获取集合操作序列MongoDB

Get collection operation sequence MongoDB

我需要通过守护进程在运行时获取收集操作的顺序,以便将其写入类似于消息代理的系统。从指定位置读取历史的必要能力

可能我可以通过阅读opLog来解决这个问题。

  1. 使用opLog是正确的解决方案吗?
  2. oplog 是否包含所有数据库的记录,而不是按集合分割?

使用MongoDB v4.2

Is it the correct solution to use opLog?

oplog 格式是内部格式,旨在支持复制。作为一种内部格式,它可能会在主要服务器版本之间发生变化,并且无法直接使用。

如果被打扰,您应该改用 Change Streams API which builds on the oplog and allows subscribing to data changes on a collection, database, or deployment level. Unlike direct oplog access, change streams have a documented API, can be limited with access control, can perform some filtering and modification of stream output, and can scale to support replica sets as well as sharded clusters. Change streams can also be resumed

Necessary ability to read history from a specified position

MongoDB 4.0+ 中的更改流允许您指定 startAtOperationTime 在特定时间点打开游标。如果指定的起始点是过去的,则必须在oplog的时间范围内。

Does oplog contains records for all db, not slited by collections?

oplog 是 capped collection 包含副本集或分片的所有数据更改的滚动历史记录。上限集合方面意味着 oplog 的历史记录有限 window:一旦达到最大 oplog 大小,最旧的条目将被删除以为新文档腾出空间。 local.oplog.rs 数据未按集合或命名空间过滤。