2013-07-15 4 views
0

Я использую mongodb с elasticsearch для моего приложения. Elasticsearch создает индексы путем сбора коллекции oplog. Когда оба приложения работают постоянно, любые изменения в коллекциях в mongodb немедленно индексируются. Единственная проблема, с которой я сталкиваюсь, заключается в том, что по какой-то причине мне пришлось удалить и воссоздать индекс, тогда для завершения индексирования требуется возраст (2 дня).TTL индекс на oplog или уменьшение размера oplog?

Когда я смотрел размер моего oplog по умолчанию, его емкость составляет 40 гб, а его объем составляет около 60 миллионов транзакций, из-за чего создание нового индекса занимает много времени. Что было бы лучшим способом оптимизации создания свежих индексов?

Следует ли уменьшить размер oplog, чтобы он уменьшил количество транзакций и все еще не повлиял на мою репликацию, или можно создать индекс ttl (который я не смог выполнить при нескольких попытках) на oplog.

Я использую elasticsearch с mongodb, используя реку mongodb https://github.com/richardwilly98/elasticsearch-river-mongodb/.

Любая помощь для преодоления вышеупомянутых проблем приветствуется.

ответ

0

Я не Elastic Search Pro, но ваш вопрос:

Что бы быть лучшим способом оптимизировать создание свежего индекса?

Применяется немного для всех, кто использует сторонние технологии FTS с MongoDB.

Первое, что нужно отметить, это то, что если у вас много записей, тогда нет простого способа обойти это, если вы не готовы потерять некоторые из них.

Oplog на самом деле не очень хорошая идея для этого, вам, вероятно, следует искать собственный скрипт, используя таймеры в основной коллекции, чтобы сделать это лично, или таблицу изменений, дающую вам одно место для быстрого запроса на новый или обновленные записи.

Если вы не фильтруете oplog для получения конкретных записей, то есть вы можете вытащить ВСЕ записи oplog, включая удаление, операции сбора и даже операции с базой данных. Таким образом, вы можете попытаться удалить ненужные записи из вашего поиска oplog, однако это создает новую проблему; oplog не имеет индексов или обновления индекса.

Это означает, что если вы начнете читать более подходящим образом, вы фактически будете использовать неиндексированный запрос по этим 60 миллионам записей. Это приведет к замедлению работы.

oplog не имеющий обновления индекса отвечает еще один из ваших вопросов:

возможно создать индекс ТТЛ (который я не смог сделать несколько попыток) на oplog.

Nope.

Что касается другого одного из ваших вопросов:

ли это, чтобы уменьшить размер oplog так, что она имеет меньшее количество операций

Да, но у вас будет меньше восстановление окно репликации, и не только это, но вы потеряете записи из своего «свежего» индекса, поэтому только часть ваших данных фактически индексируется. Я не уверен, с вашего вопроса, если это проблема или нет.

+0

Спасибо за разъяснение относительно TTL. Что касается размера oplog, я тестирую оптимальный размер, чтобы у меня не было проблем с репликацией и индексированием. – dittu

+0

@ dittu Хорошая вещь - рассчитать, сколько дней стоит у вас, вот как должен выглядеть размер oplog, оттуда вы можете решить, сколько дней вам действительно нужно – Sammaye

0

Вы можете уменьшить значение oplog для одного вторичного элемента, с которым не происходит синхронизации реплики. Посмотрите rs.syncFrom и «Измените размер Oplog» в документах mongodb.

Смежные вопросы