Производительность платформы агрегации Mongodb

#mongodb

#mongodb

Вопрос:

Я использую mongodb фреймворк агрегации для всех запросов get, когда я говорю get request для извлечения одного документа, а также нескольких документов.За несколько просьб у меня примерно от 90 до 100 этапов в моей агрегации трубопровода( $match , $skip , $limit , $lookup , $unwind , $addFields , $group ) эти этапы, то, что я продолжаю последовательно.Если я превышаю лимит более 50, это выдает ошибку типа group stage has exceeded the memory limit или для выполнения запроса требуется около 60 секунд.В моей базе данных каждая коллекция содержит более 60 000 документов.Как мне решить эту проблему? Решает ли сегментирование мою проблему?

Ответ №1:

Вот некоторые оптимизации для оптимизации вашего запроса: 1. Попробуйте уменьшить количество записей, которые будут извлекаться на первом этапе самой конвейерной линии. 2. Создайте индексы для полей, запрашиваемых в первом конвейере, предпочтительно в $match 3. Индексы будут использоваться только на первом этапе конвейера. 4. Сегментирование увеличит пропускную способность при незначительных затратах на выполнение запросов (это также зависит) PS: поиск не будет работать на разделенных соединениях

Комментарии:

1. Кроме того, чтобы устранить ошибки, связанные с превышением объема памяти, попробуйте использовать параметр allowdiskuse в конвейере агрегации