MongoDB имеет две встроенные опции для агрегирования данных - aggregation framework и map-reduce.
Агрегация агрегации выполняется быстрее (выполняется как родной код на C++, в отличие от работы по сокращению карты JavaScript), но более ограничена в виде поддерживаемых агрегатов. Map-reduce очень универсален и может поддерживать очень сложные агрегации, но медленнее, чем структура агрегации, и может быть сложнее закодировать.
Любой из них был бы хорошим вариантом для скопления в реальном времени.
Еще одно соображение, которое необходимо учесть, состоит в том, что начиная с выпуска 2.4 структура агрегации возвращает один документ, содержащий его результаты, и поэтому ограничивается возвратом 16 МБ данных. Напротив, задания MongoDB для сокращения карт не имеют такого ограничения и могут выводиться непосредственно в коллекцию. В предстоящей версии 2.6 MongoDB структура агрегации также получит возможность выводить непосредственно в коллекцию с использованием нового оператора $out.
Основываясь на описании вашего прецедента, я бы рекомендовал использовать map-reduce, поскольку я предполагаю, что вам нужно вывести более 16 МБ данных. Кроме того, обратите внимание, что после первого запуска с уменьшением размера карты можно выполнить incremental map-reduce заданий, которые запускаются только на новые/измененные данные и объединяют результаты в существующую коллекцию вывода.
Как вы знаете, MongoDB не поддерживает триггеры, но вы можете легко реализовать триггеры в приложении, закрыв MongoDB oplog. Это blog post и этот SO post хорошо накрывают тему.
Вы считали, что структура mongodb [агрегатный конвейер] (http://docs.mongodb.org/manual/core/aggregation-pipeline/)? –
Я совершенно новичок в этом. Как мне сделать это в режиме реального времени? – krikara
Сначала я не совсем понял ваш вопрос. Посмотрите на этот вопрос (http://stackoverflow.com/questions/5807618/strategies-for-real-time-aggregations-in-mongodb?rq=1). У него аналогичная проблема –