Я знаю, что структура агрегации подходит, если существует исходный конвейер $match
, чтобы ограничить собираемую коллекцию. Однако могут быть случаи, когда фильтрованная коллекция может быть большой, скажем, около 2 миллионов, а агрегация будет включать $group
. Является ли структура агрегации пригодной для работы над такой коллекцией, учитывая требование вывести результаты не более 5 секунд. В настоящее время я работаю над одним узлом. Выполняя агрегацию по набору осколков, будет значительное улучшение производительности.Структура агрегирования при полном сканировании таблицы
ответ
Насколько я знаю, единственными ограничениями являются то, что результат агрегации не может превышать предел 16 МБ, так как то, что он возвращает, является документом, и это максимальный размер для документа в MongoDB. Кроме того, вы не можете использовать более 10% от общей памяти компьютера, так как обычно используются этапы $ match, чтобы уменьшить набор, с которым вы работаете, или фазу $ project, чтобы уменьшить данные на один документ.
Имейте в виду, что в заштрихованной среде после фаз $ group или $ sort агрегация возвращается в MongoS перед отправкой на следующую фазу трубопровода. Потенциально MongoS может работать на том же компьютере, что и ваше приложение, и может повредить вашу производительность приложения, если не обрабатываться правильно.
OK, поэтому он может обрабатывать такое количество данных. Но из того, с чем я столкнулся до сих пор, когда сбор, в котором выполняется агрегация, содержит так много данных, производительность ухудшается. У меня есть эта проблема в другом вопросе (http://stackoverflow.com/questions/14887626/aggregation-query-performance-and-improvement-on-dataset-1m). Похоже, это ограничение. – MervS
Действительно, в конце концов, он должен отсканировать все эти данные. Это еще одна причина, кроме ограничения размера для уменьшения количества данных с $ match или $ project. Если вы используете осколки, сканированные данные будут только подмножеством, которое оно хранится в осколке, и поэтому это будет улучшение производительности, поскольку оно не сканирует всю коллекцию. – lgomezma
Это выглядит дорого, хотя, если у меня есть 5 миллионов документов для агрегирования, мне кажется, мне нужно настроить несколько осколков, чтобы получить результат в реальном времени. :( – MervS