Mongodb Mongo永久性oplog,永久性变更流可恢复性

Mongodb Mongo永久性oplog,永久性变更流可恢复性,mongodb,Mongodb,我们在事件源项目中使用Mongo作为事件存储。我们的数据库只有一个副本用于支持事务,我们不会使用多副本、碎片或Mongo的任何其他高级功能 为了将事件投影到报告表想法中,我们需要能够从历史上的任何一点永久恢复“变更流”。我们只需要插入的历史,不再需要 为此,我们将恢复令牌和每次插入的操作时间及其id存储在一个单独的集合中,当我们想从历史记录中的某个插入恢复时,我们查询并找到确切的恢复令牌,然后从那里恢复 这会导致一系列问题: 1-通过变更流存储恢复令牌和每次插入的操作时间是脆弱的,也需要存储,但

我们在事件源项目中使用Mongo作为事件存储。我们的数据库只有一个副本用于支持事务,我们不会使用多副本、碎片或Mongo的任何其他高级功能

为了将事件投影到报告表想法中,我们需要能够从历史上的任何一点永久恢复“变更流”。我们只需要插入的历史,不再需要

为此,我们将恢复令牌和每次插入的操作时间及其id存储在一个单独的集合中,当我们想从历史记录中的某个插入恢复时,我们查询并找到确切的恢复令牌,然后从那里恢复

这会导致一系列问题: 1-通过变更流存储恢复令牌和每次插入的操作时间是脆弱的,也需要存储,但有效

2-我们最近访问了oplog大小,发现oplog的可恢复性是可能的,因此为了能够从历史上的任何一点恢复,我们必须在应用程序的整个生命周期内存储和保存整个oplog,但oplog的大小每2小时达到其最大容量! 所以不可能保存和保存oplog

我们该怎么办?
似乎除了在Mongo上实现来自历史的变更流之外,没有其他方法了。

要恢复变更流,恢复点必须在oplog中。因此,您的oplog需要返回到您希望恢复的地方


没有说任何关于oplog大小的限制。您应该能够将其设置为任意大的尺寸。

是的,没错。我问了MongoDB同样的问题,他们回答说我们必须在oplog中有简历令牌,因此我们应该增加oplog的大小。但是他们也说这样做不是一个好主意,也不是为了永久使用它,保留所有oplog会有性能问题。所以他们建议使用他们的卡夫卡连接器,将事件和更改流式传输到卡夫卡主题中,并从中传输到我的投影仪中。这就是解决方案