Новая структура агрегации MongoDB , вероятно, решит ваши проблемы, но до тех пор Я предлагаю запускать карту / сокращение в качестве регулярно запланированного фонового задания и запрашивать коллекцию, полученную из карты / сокращения, в режиме реального времени. . Это значительно ускорит результаты группового подсчета, но подсчет может быть немного устаревшим (в зависимости от того, когда в последний раз выполнялось уменьшение фоновой карты).
Пояснение:
Карта / уменьшение MongoDB намного медленнее, чем group () по нескольким причинам:
- Промежуточные преобразования: BSON -> JSON -> BSON -> JSON -> BSON (MongoDB хранит данные в двоичном BSON, но JavaScript map () и lower () должны быть снабжены текстовым JSON)
- Функции JavaScript Javascript map () и reduce () должны интерпретироваться однопоточным механизмом JavaScript
Собственные функции агрегации C в MongoDB намного быстрее, но одно из их ограничений заключается в том, что весь вывод должен соответствовать одному документу BSON (в настоящее время 16 МБ). Именно поэтому существует ограничение на количество уникальные ключи.
Среда агрегации MongoDB объединит в себе лучшее из обоих методов:
- Собственное исполнение для скорости
- Нет преобразования BSON в / из JSON
- Результаты можно отправлять в коллекцию, минуя ограничения, установленные одним документом.
Фреймворк уже задокументирован и доступен в версиях разработки MongoDB . Фреймворк планируется к выпуску в феврале 2012 года.