我在我的应用程序中使用mongodb和elasticsearch。Elasticsearch通过监控oplog集合来创建索引。当两个应用程序都在持续运行时,mongodb中对集合的任何更改都会立即被索引。我面临的唯一问题是,如果由于某种原因,我不得不删除并重新创建索引,那么完成索引需要很长时间(2天)。
当我查看我的oplog的大小时,默认情况下它的容量是40 my,它容纳了大约6000万个事务,因此创建一个新的索引需要很长时间。优化fresh索引创建的最佳方式是什么?
它是为了减小oplog的大小,以便它容纳的事务数量更少,并且仍然不会影响我的复制,还是可以在oplog上创建一个ttl索引(我多次尝试都失败了)。
我使用的是mongodb的elasticsearch和mongodb river https://github.com/richardwilly98/elasticsearch-river-mongodb/。
任何帮助克服上述问题的人都将不胜感激。
发布于 2013-07-15 18:50:31
我不是Elastic Search Pro,而是你的问题:
优化fresh索引创建的最佳方法是什么?
确实适用于所有使用第三方FTS技术与MongoDB的人。
首先要注意的是,如果你有很多记录,除非你准备好丢失其中的一些记录,否则没有简单的方法可以绕过这一点。
oplog确实不是一个好主意,你可能应该尝试使用一个自定义脚本,使用主集合中的计时器来亲自做这件事,或者是一个变更表,让你在一个地方快速查询新的或更新的记录。
除非您正在过滤oplog以获得特定的记录,即插入,否则您可能会拉出所有oplog记录,包括删除、收集操作甚至数据库操作。因此,您可以尝试从oplog搜索中剥离不需要的记录,但是,这会产生一个新问题;oplog没有索引或索引更新。
这意味着,如果你开始以一种更恰当的方式阅读,你实际上将在这6000万条记录上使用一个无索引查询。这将导致较慢的性能。
没有索引更新的oplog回答了您的另一个问题:
是否可以在oplog上创建一个ttl索引(我多次尝试都失败了)。
不是的。
至于你的另一个问题:
是不是要减小oplog的大小,以便它能容纳更少的事务
是的,但你将有一个较小的复制恢复窗口,不仅如此,你还会丢失“新”索引中的记录,因此实际上只有一部分数据被索引。从你的问题看,我不确定这是不是一个问题。
发布于 2016-08-03 23:11:09
您可以减少没有复制副本从其同步的单个辅助成员的oplog。在mongodb文档中查找rs.syncFrom并"Change the Size of the Oplog“。
https://stackoverflow.com/questions/17651085
复制相似问题