2013-02-22 4 views
0

Я знаю, что структура агрегации подходит, если существует исходный конвейер $match, чтобы ограничить собираемую коллекцию. Однако могут быть случаи, когда фильтрованная коллекция может быть большой, скажем, около 2 миллионов, а агрегация будет включать $group. Является ли структура агрегации пригодной для работы над такой коллекцией, учитывая требование вывести результаты не более 5 секунд. В настоящее время я работаю над одним узлом. Выполняя агрегацию по набору осколков, будет значительное улучшение производительности.Структура агрегирования при полном сканировании таблицы

ответ

1

Насколько я знаю, единственными ограничениями являются то, что результат агрегации не может превышать предел 16 МБ, так как то, что он возвращает, является документом, и это максимальный размер для документа в MongoDB. Кроме того, вы не можете использовать более 10% от общей памяти компьютера, так как обычно используются этапы $ match, чтобы уменьшить набор, с которым вы работаете, или фазу $ project, чтобы уменьшить данные на один документ.

Имейте в виду, что в заштрихованной среде после фаз $ group или $ sort агрегация возвращается в MongoS перед отправкой на следующую фазу трубопровода. Потенциально MongoS может работать на том же компьютере, что и ваше приложение, и может повредить вашу производительность приложения, если не обрабатываться правильно.

+0

OK, поэтому он может обрабатывать такое количество данных. Но из того, с чем я столкнулся до сих пор, когда сбор, в котором выполняется агрегация, содержит так много данных, производительность ухудшается. У меня есть эта проблема в другом вопросе (http://stackoverflow.com/questions/14887626/aggregation-query-performance-and-improvement-on-dataset-1m). Похоже, это ограничение. – MervS

+0

Действительно, в конце концов, он должен отсканировать все эти данные. Это еще одна причина, кроме ограничения размера для уменьшения количества данных с $ match или $ project. Если вы используете осколки, сканированные данные будут только подмножеством, которое оно хранится в осколке, и поэтому это будет улучшение производительности, поскольку оно не сканирует всю коллекцию. – lgomezma

+0

Это выглядит дорого, хотя, если у меня есть 5 миллионов документов для агрегирования, мне кажется, мне нужно настроить несколько осколков, чтобы получить результат в реальном времени. :( – MervS