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