oplog上的TTL索引还是减少了oplog的大小?

时间:2013-07-15 09:38:45

标签: mongodb elasticsearch

我正在为我的应用程序使用mongodb和elasticsearch。 Elasticsearch通过监视oplog集合来创建索引。当两个应用程序不断运行时,mongodb中对集合的任何更改都会立即编入索引。我面临的唯一问题是,如果由于某种原因我必须删除并重新创建索引,那么索引完成需要很长时间(2天)。

默认情况下,当我查看我的oplog的大小时,它的容量是40gb,并且它持有大约6000万个交易,因此创建新索引需要很长时间。 优化新索引创建的最佳方法是什么?

是否减少了oplog的大小,以便它保持较少的事务数量并且仍然不会影响我的复制,或者是否可以在oplog上创建ttl索引(我在多次尝试时都没有这样做)。

我正在使用mongodb使用mongodb river https://github.com/richardwilly98/elasticsearch-river-mongodb/进行弹性搜索。

对于克服上述问题的任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我不是Elastic Search Pro,而是您的问题:

  

优化新索引创建的最佳方法是什么?

对所有使用MongoDB的第三方FTS技术人员都适用。

首先要注意的是,如果你有很多记录,那么除非你准备失去其中的一部分,否则没有简单的方法。

oplog对此并不是一个好主意,您可能应该在主集合中使用自定义脚本使用定时器来亲自执行此操作,或者使用更改表为您提供单个位置以快速查询新的或更新记录。

除非您过滤oplog以获取特定记录,即插入,否则您可能会删除所有oplog记录,包括删除,收集操作甚至数据库操作。因此,您可以尝试从oplog搜索中删除不需要的记录,但是,这会产生一个新问题; oplog没有索引或索引更新。

这意味着如果您开始以更合适的方式阅读,那么您将实际使用对这6000万条记录的无索引查询。这将导致性能降低。

没有索引更新的oplog会回答您的另一个问题:

  

是否可以在oplog上创建一个ttl索引(我在多次尝试时都没能做到)。

不。

至于你的另一个问题:

  

是否减少了oplog的大小,以便它拥有更少的事务数

是的,但是您将拥有一个较小的复制恢复窗口,不仅如此,您将丢失“新鲜”索引中的记录,因此实际上只有一部分数据被编入索引。如果这是一个问题,我不确定你的问题。

答案 1 :(得分:0)

您可以减少没有副本同步的单个辅助成员的oplog。在mongodb文档中查找rs.syncFrom和“更改Oplog的大小”。