0

我正在为我的应用程序使用带有弹性搜索的 mongodb。Elasticsearch 通过监控 oplog 收集来创建索引。当两个应用程序都在持续运行时,对 mongodb 中的集合的任何更改都会立即被索引。我面临的唯一问题是,如果由于某种原因我不得不删除并重新创建索引,那么索引完成需要很长时间(2 天)。

当我查看我的 oplog 的默认大小时,它的容量是 40gb,它拥有大约 6000 万个事务,因此创建一个新索引需要很长时间。优化新索引创建的最佳方法是什么?

是要减少 oplog 的大小,以便它拥有更少的事务数量并且仍然不会影响我的复制,还是可以在 oplog 上创建一个 ttl 索引(我多次尝试失败)。

我使用 mongodb River https://github.com/richardwilly98/elasticsearch-river-mongodb/使用弹性搜索和 mongodb 。

感谢您对克服上述问题的任何帮助。

4

2 回答 2

0

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

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

确实适用于所有使用第三方 FTS 技术和 MongoDB 的人。

首先要注意的是,如果您有很多记录,那么除非您准备丢失其中一些,否则就没有简单的方法可以解决这个问题。

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

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

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

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

是否可以在 oplog 上创建一个 ttl 索引(我多次尝试都失败了)。

没有。

至于你的另一个问题:

是不是要减小 oplog 的大小,以便它持有更少的事务数?

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

于 2013-07-15T10:50:31.023 回答
0

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

于 2016-08-03T15:11:08.947 回答